Sérialisation

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 - 22 août 2006 à 21:07
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 - 23 août 2006 à 15:29
Salut :

J'ai un problème de sérialisation avec Java. J'ai créé deux programmes qui doivent échanger des données via la sérialisation des objets.
Les deux classes implémentent l'interface "Serializable" mais lorque j'éxecute ces deux programmes une exception "NotSerializableException" de lève.

En fait, j'ai un membre de type "Image" que je veux transmettre à l'autre programme.

10 réponses

tucobouch Messages postés 194 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 1 mai 2009 50
23 août 2006 à 10:07
Bonjour,
en regardant la javadoc, je vois que Image n'implemente pas l'interface Serializable, elle ne peut donc etre sauvegardée avec la Serialization. Il doit exister une astuce... que  je ne connais pas :(

- [TucoBouch] -
0
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 7
23 août 2006 à 10:08
il faut que tous le sous objets de tes objets soient sérializables.
Par exemple les thread et composants swing ne le sont pas
tu peux mettre transient devant la déclaration d un attribut que tu peux ou ne veux pas serialiser !
++ Toinou
0
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 7
23 août 2006 à 10:20
lol turbocouch on a posté en mm tps !!
ben Image fait parti du package awt donc je pense pas qu elle soit serializable comme ca !!
au pire tu peux essaye d utiliser un truc du genre
class MyImage extends Image implements Serializable
mais franchement j suis quasi sur que ca passera pas (j ai déjà rencontré + ou - ce genre de pb)
++ Toinou
0
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
23 août 2006 à 11:01
Salut,

Surtout ne cherche pas a rendre image serializable tu vas te faire chier pour rien vu qu'il faut limite rendre la terre entiere serializable pour Image, mais tu peux rendre sont contenu serialisable soit le tableau de pixel de l'image ce qui reste le plus simple faire apres pour refaire ton image depuis ce tableau rien de plus simple Toolkit.getDefaultToolkit().createImage(byte [] data)

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
23 août 2006 à 12:07
Salut :

Comment faire pour extraire un tableau de pixel de l'image?
Je cherche une fonction qui retourne "byte []" pourque je puisse l'utiliser en tantque paramètre de la fonction  Toolkit.getDefaultToolkit().createImage(byte [] data)

Et merci ...
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
23 août 2006 à 12:42
Salut :

J'ai trouvé la méthode "java.awt.image.BufferedImage.getData ()" qui retourne un objet "Raster".
0
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
23 août 2006 à 13:23
Salut,

deux solutions pour ce faire

1 depuis un fichier :
public static Image createImage(InputStream in) {
        try {
            byte buffer[] = new byte[in.available()];
            int n=0, offset=0;
            while(true) {
                int i = in.available();
                n=in.read(buffer, offset, i);
                if (n<=0 || n == i) {
                    if (n!=-1)  offset+=n;
                    break;
                }
                offset+=n;
            }
            in.close();
            return buffer;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
l'utilisation :
byte [] image = createImage(new FileInputStream(new File("image.png")));
Image img = Toolkit.getDefaultToolkit().createImage(image);

2 depuis une image : la solution est d'utiliser PixelGrabber

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
23 août 2006 à 13:24
Salut,

ouais a voir pour le raster vu que le desavantage de PixelGrabber c'est que pour lui le tableau de pixels c'est un int[]

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
23 août 2006 à 13:28
Salut :

Je ne suis pas en train de manipuler une image stockée sur disque mais une image en mémoire.  (un objet de la classe BufferedImage)
0
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
23 août 2006 à 15:29
Salut,

Sinon autre possibilité serait de passer par ImageIO exemple (trouvé chez sun)

staticbyte[] encode(BufferedImage image) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(image, "jpeg", out);
return out.toByteArray();
}

static BufferedImage decode(byte[] data) throws IOException {
return ImageIO.read(new ByteArrayInputStream(data));
}

comme ca tu serialise et deserialise la data (byte[]) de ton image

Sinon tu peux aussi passer par JAI(Java Advanced Imaging) pour voir

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Rejoignez-nous