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 :

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;
    }
}
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.

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