Salut à tous
J'ai créer une classe contenant une BufferedImage et une String. Je veux sérialiser cette classe malheureusement les BufferedImage ne sont pas sérializables. J'ai trouvé une solution dans un post mais j'ai du mal l'appliquer car si elle fonctionne bien pour l'enregistrement pour la lecture ça ne marche pas
Ma Classe
L'écriture se fait comme ceci dans une autre classe
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 public class Figurine implements Serializable { /** * */ private static final long serialVersionUID = 1L; private transient BufferedImage m_fig = null; private String Description=""; public Figurine (String Descro, String FichFig) throws IOException { File file = new File(FichFig); m_fig= javax.imageio.ImageIO.read(file); Description=Descro; } //Pour l'écriture private void writeObject(java.io.ObjectOutputStream output) throws IOException { OutputStream out = new ByteArrayOutputStream(); ImageIO.write(m_fig, "png", out); byte[] Tbyte = ((ByteArrayOutputStream) out).toByteArray(); output.defaultWriteObject(); output.writeInt(Tbyte.length); output.write(Tbyte); } // pour la lecture private void readObject(java.io.ObjectInputStream input) throws IOException, ClassNotFoundException { input.defaultReadObject(); byte[] Tbyte = new byte[input.readInt()]; input.read(Tbyte); InputStream in = new ByteArrayInputStream(Tbyte); m_fig = ImageIO.read(in); } }
La lecture comme cela
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 FileOutputStream fSvg = new FileOutputStream(NomFich); ObjectOutputStream svgBat = new ObjectOutputStream(fSvg); svgBat.writeObject(laFig); svgBat.flush(); svgBat.close(); fSvg.close();
A la lecture j'ai l'exception suivante: javax.imageio.IIOException: Error reading PNG image data sur cette instruction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 FileInputStream fSvg = new FileInputStream(l_nom); ObjectInputStream svgBat = new ObjectInputStream(fSvg); laFig=(Figurine)svgBat.readObject(); svgBat.close(); fSvg.close();
Si quelqu'un voit où je me plante je suis preneur de la solution et d'explications. Merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 m_fig = ImageIO.read(in);
Partager