IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Serialization et Bitmap


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 86
    Par défaut Serialization et Bitmap
    Bonjour.

    Entre mes différentes activities, je passe des objets de cette manière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Intent intent;
    intent = new Intent(a1Activity.this,a2Activity.class);
    MyObject object = new MyObject();
    object.setName("toto");
    ArrayList<MyObject> al = new ArrayList<MyObject>();
    a.add(object);
    intent.putExtra("param",al);
    startActivity(intent);
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class MyObject implements Serializable 
    {
    	private String name;
            private Bitmap bitmap;
            ...
    }
    Cela fonctionne très bien ... si je ne mets rien dans bitmap.
    Mais si je remplis bitmap j'ai une exception lors du startactivity

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Bitmap mBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_home);
    object.setBitmap(mBitmap);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    01-19 10:55:22.163: ERROR/AndroidRuntime(7849): Uncaught handler: thread main exiting due to uncaught exception
    01-19 10:55:22.233: ERROR/AndroidRuntime(7849): java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.android.myproject.Myobject)
    01-19 10:55:22.233: ERROR/AndroidRuntime(7849):     at android.os.Parcel.writeSerializable(Parcel.java:1131)
    01-19 10:55:22.233: ERROR/AndroidRuntime(7849):     at android.os.Parcel.writeValue(Parcel.java:1085)
    ...
    Vous avez une idée ?

  2. #2
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Salut,

    La class Bitmap n'est pas Serializable par défault seul BitmapFactory et Bitmap.Config le sont . (voir http://developer.android.com/referen...ializable.html).


    Tu dois implémenter les fonctions writeobject et readobject de ta class , où dans celle ci tu pourra sauvegarder/restaurer ta bitmap via le parcel .

    un exemple :
    http://stackoverflow.com/questions/3...map-buggy-code

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 86
    Par défaut
    Merci Feanorin.

    Je viens d'adapter mon projet pour prendre en compte cette solution.

    Cela semble marcher ... sauf j'ai une belle image toute noire.

    Mon but est de récupérer l'image d'une image view, la stocker dans mon objet, passer cet objet à l'activity suivante, récupérer l'image et la mettre dans une textview.

    Donc si au départ j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Bitmap mBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_home);
    object.setBitmap(mBitmap);
    ensuite ça passe par le write object.

    Et de l'autre côté j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ImageView iv = (ImageView)findViewById(R.id.myimage);
    iv.setImageBitmap(object.getBitmap());
    En supposant que le writeobject soit bon (y'a pas de raisons), ça doit fonctionner ?

  4. #4
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    La sérialisation des bitmaps est une opération lourde (mémoire & cpu).
    Ne peux tu pas faire autrement ? Cette image vient d'où ? Elle est téléchargé depuis le net ? c'est une ressource de ton projet ? autre ?

  5. #5
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Oui cela doit marcher

    dans l'exemple que je t'ai mis en lien tu sauvegardes les pixels de l'image avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     out.write(bytesar);
    et tu les récupères avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    in.read(toread, 0, toread.length);
    regarde avec le debugger ce que tu as lorsque tu rentres dans cette procédure de même pour le write regarde bien que bytesar contient les pixels de ta bitmap.

    Maintenant , n'y aurait t-il pas moyen de ne sauvegarder que le nom de l'image ou son emplacement dans le ressources, cela te permettrait d'allouer la mémoire que quand cela serait nécessaire au lieu d'avoir un menbre Bitam à remplir à chaque activity ?

Discussions similaires

  1. Serializer et deserializer une Bitmap
    Par Cuillere dans le forum Android
    Réponses: 0
    Dernier message: 24/02/2011, 14h44
  2. transfert d'un fichier bitmap en socket tcp
    Par localhost dans le forum C++Builder
    Réponses: 5
    Dernier message: 29/07/2002, 00h40
  3. Pb Lecture de bitmap monochrome
    Par Loïc38 dans le forum C++Builder
    Réponses: 4
    Dernier message: 02/07/2002, 18h24
  4. Lecture d'une image bitmap
    Par Geronimo dans le forum x86 32-bits / 64-bits
    Réponses: 18
    Dernier message: 28/06/2002, 12h01
  5. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo