android comment enregistrer une image bitmap - code bogué
Im essayant de sérialiser une classe dans laquelle j'ai un bitmap variable. Voici le code qui est un peu de travail.... J'ai besoin d'aide pour trouver ce qui est encore faux.....
private Bitmap myVideoScreenshotBm;
private void writeObject(ObjectOutputStream out) throws IOException{
out.writeInt(myVideoScreenshotBm.getRowBytes());
out.writeInt(myVideoScreenshotBm.getHeight());
out.writeInt(myVideoScreenshotBm.getWidth());
int bmSize = myVideoScreenshotBm.getHeight() * myVideoScreenshotBm.getRowBytes();
ByteBuffer dst= ByteBuffer.allocate(bmSize);
myVideoScreenshotBm.copyPixelsToBuffer(dst);
byte[] bytesar=new byte[bmSize];
dst.position(0);
dst.get(bytesar);
out.write(bytesar);
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{
int nbRowBytes=in.readInt();
int height=in.readInt();
int width=in.readInt();
//
int bmSize = nbRowBytes * height;
byte[] toread= new byte[bmSize];
in.read(toread, 0, toread.length);
ByteBuffer dst= ByteBuffer.allocate(bmSize);
dst.put(toread);
dst.position(0);
myVideoScreenshotBm=Bitmap.createBitmap(width, height, Bitmap.Config.ALPHA_8);
myVideoScreenshotBm.copyPixelsFromBuffer(dst);
}
Im pas faire d'erreur, mais l'image bitmap Im se sont faux... d'ailleurs, je ne sais pas comment faire pour savoir quel Bitmap.Config drapeau est adapté... comment savoir ?
toute aide ?
OriginalL'auteur Fabien | 2010-09-02
Vous devez vous connecter pour publier un commentaire.
Voici le code de sérialisation avec optimisation de la mémoire utilisée. Im en utilisant un tampon statique qui se développe pour le plus grand taille du bitmap et que je réutiliser à chaque fois.
}
Je ne vois que deux raisons possibles. Tout d'abord, l'Exception à vous dire : "que les Signaux de la classe ObjectInputStream rencontré un type primitif (int, char, etc.) au lieu d'une instance d'objet dans le flux d'entrée."
De seconde en seconde. Peut-être êtes-vous pas en train de lire les données dans le même ordre que vous avez écrit dans l'objet sérialisé. Veillez à respecter l'ordre... écrit pour la première fois, d'abord pour être lu.
merci beaucoup pour le partage!
Cela a bien fonctionné pour moi, sauf pour le problème que j'ai rencontré ici - stackoverflow.com/questions/10442761/.... Des idées?
OriginalL'auteur Fabien
Pas besoin d'avoir les redundant array + toute la logique de l'ordre de + utilise les méthodes pour manipuler le tampon + utf est mieux pour les chaînes et éviter les lancers + synchronisation (mais il n'est pas thread-safe de toute façon) :
OriginalL'auteur gbin
Pour simplifier les choses, vous pouvez utiliser la sérialisation standard pour tous les domaines autres que l'image bitmap. Il suffit de marquer le bitmap comme transitoire, et de l'utilisation.defaultWriteObject(); et dans les.defaultReadObject();. - Ce vraiment nettoie le code:
OriginalL'auteur Brad