Bonjour,
Juste une petite question : j'essaye de compresser une image avant de l'enregistrer. Le cas a déjà été traité plein de fois, mais j'ai un petit problème dans mon cas :
On trouve facilement comment compresser une image pour l'enregistrer au format png ou jpg. On trouve rarement par contre comment compresser cette image avant de l'enregistrer par le procédé de Sérialization :
Voilà en gros l'idée. Un panel qui capture l'image de ce qu'il affiche, et une classe qui contient l'image comme attribut et qui va être sérialisée.
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 class Truc implements Serializable { String nom = "machin"; transient Panel panel = new Panel(); ImageIcon img = new ImageIcon(panel.capturerImage()); } class Panel extends JPanel { ... public Image capturerImage() { BufferedImage buffer = new BufferedImage(this.getSize().width, this.getSize().height, BufferedImage.TYPE_3BYTE_BGR);//type choisit au hasard Graphics g = buffer.createGraphics(); //On crée un Graphic que l'on insère dans tamponSauvegarde this.paint(g); return buffer; } }
Le problème c'est qu'en l'état actuel, l'image générée est assez conséquente. Comme puis-je la réduire avant la sauvegarde ?
J'ai envisagé plusieurs solutions :
1) BufferedImage.TYPE_3BYTE_BGR : est-ce le mode le plus adapté ?
2) Mon panel contient majoritairement du blanc. Je pourrais créer un liste des pixels non blancs ?
3) Utiliser un algorithme de compression comme celui des images jpg, mais je sais pas faire... Existe-t-il quelque chose de tout fait ?
Merci pour votre aide
Partager