Bonjour,

voilà pas mal de temps que je suis sur un problème, par rapport au poids d' une image de type png.
J' aimerais en réduire le poids finale, et comme c'est des images avec un indexage de couleurs il n'existe pas de compression ( du moins c'est ce que j' ai compris ).
Le seul moyen est donc de réduire la palette ( soit le nombres de couleurs ) !

J'arrive a créer un IndexColorModel plus léger, mais pour ce qui est de écrire mon image a l'intérieure, c'est vraiment galère.

Voilà plus ou moins ce que j'ai fait :

création d'une palette :
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
 
/**
         * Create an IndexColorModel with the number of color wanted.
         * @param numberColors the number of color in palette, must be include in 0<numberColors<256.
         * @return the appropriate IndexColorModel
         */
	private IndexColorModel createColorModel(final int numberColors) {
		final int bits = 8;
 
		byte[] reds = new byte[256];
		byte[] greens = new byte[256];
		byte[] blues = new byte[256];
 
		for (int i = 0; i < numberColors; i++)
			reds[i] = greens[i] = blues[i] = (byte)(i*2);
		return new IndexColorModel(bits,256,reds,greens,blues);
	}
J'ai trifouiller dans tous les sens pour écrire mon image originale dedans, mais impossible de joindre les deux bouts !! Ce autour de quoi je tourne ressemble à ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
ImageTypeSpecifier imgType = ImageTypeSpecifier.createFromRenderedImage(imageOriginal);
 
SampleModel sp = imgType.getColorModel().createCompatibleSampleModel(imageOriginal.getWidth(), imageOriginal.getHeight());
WritableRaster wr = imgType.getColorModel().createCompatibleWritableRaster(imageOriginal.getWidth(), imageOriginal.getHeight());
 
/**
* ou
*/
 
ImageProducer ip = new MemoryImageSource(imageOriginal.getWidth(),imageOriginal.getHeight(),createColorModel(128),new byte[imageOriginal.getWidth()*imageOriginal.getHeight()],0,imageOriginal.getWidth());

Quelqu'un aurait' il une idée ou une solution, s'il vous plaît, car c'est pas faute d'avoir cherché, j'ai vraiment rien trouvé !

Merci,
Thomas