IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Problème de décompression


Sujet :

Collection et Stream Java

  1. #1
    Membre chevronné

    Inscrit en
    Février 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 122
    Par défaut Problème de décompression
    Bonjour,
    Je developpe actuellement un éditeur de map pour un jeu en developpement également, dans le cadre d'un projet de synthèse de fin de DUT informatique.
    Voici mon problème :
    Nous avons une application réalisée en QT qui genere des Tuiles pour réduire les images : en gros nos tuiles sont sous cette forme:
    - Header contenant les Informations de l'image
    - Image compressée avec la methode qCompress de QT ( utilisant la zlib )

    L'idée c'est que l'éditeur de map est en Java, et que je dois pouvoir recharger les tuiles en questions pour afficher les images correspondantes dans l'éditeur, et pouvoir les exporter en base de donnée avec leur placement ensuite.
    Donc pour la lecture des tuile cela fonctionne, j'ai testé, le problème est la decompression de la partie Image du fichier.
    J'ai utilisé un Inflater qui me renvoi "Unknown compression Method" si je met le constructeur a false ou rien, et "invalid stored block lengths" si je met le constructeur a true.
    Je suis donc un peu bloqué dans l'avancement de ce programme relativement important.
    Si quelqu'un a une idée d'ou peut venir le problème, merci d'avance.
    Voici mes sources:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    	public static byte[] loadImageinFile(File inputFile) throws IOException 
    	{
    		FileInputStream fis = new FileInputStream(inputFile);
    		int oct;
    		Vector<Byte> tempor = new Vector<Byte>();
    		fis.skip(16);// on saute le header
    		while((oct = fis.read()) != -1)
    			tempor.add(new Byte((byte)oct));
    		byte [] finalbuffer = new byte [tempor.size()];
    		for(int idx = 0; idx < tempor.size(); idx++)
    			finalbuffer[idx] = tempor.get(idx).byteValue();
    		return finalbuffer;
    	}
     
    	public void load(String path) throws DataFormatException
    	{
    		// Lecture du fichier et remplissage des byte array
    		tfile = new File(path);
    		DataInputStream fis = null;
    		FileInputStream fis2 = null;
    		TileHeader theader = new TileHeader();
    		ByteBuffer bbf = null;
    		if(!tfile.exists())
    			JOptionPane.showMessageDialog(null,"Fichier inexistant");
    		else
    		{
    			try
    			{
    				fis2 = new FileInputStream(path);
    				fis = new DataInputStream(new BufferedInputStream(fis2));
    				theader.signature = Integer.reverseBytes(fis.readInt());
     
    				theader.width = Short.reverseBytes(fis.readShort());
    				theader.height = Short.reverseBytes(fis.readShort());
     
    				theader.baseTileWidth = Short.reverseBytes(fis.readShort());
    				theader.baseTileHeight = Short.reverseBytes(fis.readShort());
     
    				theader.baseTileX = Short.reverseBytes(fis.readShort());
    				theader.baseTileY = Short.reverseBytes(fis.readShort());
    				System.out.println(theader.signature);
    				System.out.println("Lecture header finie");
    				/*if(theader.signature != TILE_SIGN)
    					JOptionPane.showMessageDialog(null,"Tuile invalide");
    				else
    				{
    					//remplissage du tileinfo
     
    				}*/
    				tileInfo = new Rectangle(theader.baseTileX, theader.baseTileY, theader.width, theader.height);
    				System.out.println("info tuile : "+tileInfo);
    				System.out.println("Chargement de l'image");
    				byte[] compressedbuffer = loadImageinFile(tfile); // on lit l'image dans le fichier
    				System.out.println("image chargee");
    				System.out.println(compressedbuffer);
    				// decompression du buffer
     
    				Inflater decompresser = new Inflater(true);
    				decompresser.setInput(compressedbuffer);
    				System.out.println("Input selectionnee");
    				byte[] buffer = new byte[theader.width * theader.height * 4];
    				System.out.println("buffer alloue");
    				int resultLength = decompresser.inflate(buffer);
    				System.out.println("decompression faite");
    				decompresser.end();
    				System.out.println("Buffer decompresse");
    				// construction de l'image
    				BufferedImage bfimage = new BufferedImage(tileInfo.width, tileInfo.height, BufferedImage.TYPE_INT_ARGB);
    				System.out.println("bfimage cree");
    				for(int idy = 0; idy < bfimage.getHeight(); idy++)
    					for(int idx = 0; idx < bfimage.getWidth(); idx++)
    					{
     
    						byte red = buffer[(idx + idy * bfimage.getWidth()) * 4];
    						byte green = buffer[(idx + idy * bfimage.getWidth()) * 4 + 1];
    						byte blue = buffer[(idx + idy * bfimage.getWidth()) * 4 + 2];
    						byte alpha = buffer[(idx + idy * bfimage.getWidth()) * 4 + 3];
    						int rgb =0;
    						rgb |= ((int)alpha) << 24;
    						rgb |= ((int)red) << 16; 
    						rgb |= ((int)green) << 8; 
    						rgb |= ((int)blue); 
    						bfimage.setRGB(idx, idy, rgb);
    					}
    						System.out.println("Image recomposee");
    						this.img = (Image)bfimage;
    			}
    			catch(IOException e)
    			{
    				System.out.println("unable to open inputstream");
    			}
    			finally
    			{
    				try
    				{  
    					fis.close();
    				}
    				catch(IOException e)
    				{
    					System.out.println("unable to close file");
    				}
    			}
    		}
    	}

  2. #2
    Membre chevronné

    Inscrit en
    Février 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 122
    Par défaut trouve
    Hum excuser ce post inutile je me suis aperçu que j'avais un décalage dans ma lecture dans le fichier
    désolé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.2] Problème de décompression
    Par mverhaeghe dans le forum Langage
    Réponses: 1
    Dernier message: 03/03/2009, 16h02
  2. [unzip] Problème pour décompresser une archive zip
    Par lammouch dans le forum MATLAB
    Réponses: 11
    Dernier message: 03/04/2008, 17h56
  3. Problème de décompresser un InputStream
    Par taouja dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 18/04/2007, 09h53
  4. Problème lors de décompression zip
    Par LuckyLuke56 dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 19/10/2006, 00h39
  5. 7-Zip - Problème de décompression en ligne de commande
    Par Lorponos dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 26/07/2006, 15h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo