
Envoyé par
Neige_
Je suis bien d'accord. Le soucis vient justement du fait que ce ne soit pas optimisable. Pourquoi stocker 4 octects par pixel, alors que j'utilise le gif pour justement n'en avoir qu'un ? Peut etre il existe une méthode pour forcer java a utiliser les 255 couleurs 'standart' et ainsi économiser 3/4 de mémoire ?
Mais on est bien d'accord sur le fait qu'il faut a tout prix que l'image soit décompressé.
Quand tu executes :
BufferedImage image = ImageIO.read("image.gif");
tu obtiens une image en couleurs indexées.

Envoyé par
Neige_
Prenons une image. L'image en mémoire n'est pas la même que celle à l'écran. Celle qui est a l'écran est une adaptation de celle en mémoire, dépendante de l'écran. BufferedImage retiens en mémoire les deux (voir getSource->ImageProducer, et les deux classes qui l'utilisent: FilteredImageSource, MemoryImageSource)
Donc il me semble, d'après comment c'est formulé, qu'en créant une Buffered, tu crées deux fois l'image en mémoire. Un .flush() sur une buffered efface l'image adapté, mais pas celle en mémoire. Si quelqu'un pouvait confirmer, ceci est juste une explication que je me suis faites d'après la javadoc.
La transformation se fait parfois à la volée, ca dépend du colormodel de l'image source et de l'écran.
Mais si des données intermediaires sont créées, c'est pour un souci de performances. Sans elles, ton affichage serait trop lent.

Envoyé par
Neige_
Le coup du canvas, c'est que justement on peut créer des image directement adapté a l'écran. Donc en mémoire, on a que l'image affichable, et plus celle d'origine... soit 50% d'eco. Mais pareil, dixit javadoc...
Tu peux faire la meme chose, avec des BufferedImage. L'idee, c'est que tu utilises un BufferedImage, ayant le meme ColorModel que l'ecran (avec les methodes createCompatibleImage()). Tu dessines dans ta BufferedImage l'image decompressée, que tu oublies ensuite.
Partager