Comment convertir un tableau d'octets en bitmap

123

Je souhaite stocker l'image dans SQLite DataBase. J'ai essayé de le stocker en utilisant BLOBet String, dans les deux cas, il stocke l'image et peut la récupérer, mais lorsque je le convertis pour l' Bitmaputiliser BitmapFactory.decodeByteArray(...), retourne null.

J'ai utilisé ce code, mais il renvoie null

Bitmap  bitmap = BitmapFactory.decodeByteArray(blob, 0, blob.length);
Vasu
la source
4
Veuillez lire les 5 à 10 premiers liens dans la section «Connexes» de cette page.
Mat
2
Avez-vous encodé le bitmap avant d'écrire dans la base de données?
Ronnie

Réponses:

284

Essayez ceci:

Bitmap bitmap = BitmapFactory.decodeFile("/path/images/image.jpg");
ByteArrayOutputStream blob = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0 /* Ignored for PNGs */, blob);
byte[] bitmapdata = blob.toByteArray();

Si bitmapdataest le tableau d'octets, l'obtention Bitmapse fait comme ceci:

Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapdata, 0, bitmapdata.length);

Renvoie le décodé Bitmapou nullsi l'image n'a pas pu être décodée.

Uttam
la source
2
l'image ne peut pas être décodée si elle est dans un autre format à partir
duquel
2
Que faire si je dois effectuer une telle opération plusieurs fois en séquence? La création d'un nouvel objet Bitmap à chaque fois ne consomme-t-elle pas beaucoup de ressources? Puis-je en quelque sorte décoder mon tableau en bitmap existant?
Alex Semeniuk
Je poste une réponse différente lorsque vous avez juste un tampon du pixel de l'image. J'étais toujours nul à cause du manque de avec, de hauteur et de couleur dans mon tampon. J'espère que ça aide!
Julian
31

La réponse d'Uttam n'a pas fonctionné pour moi. Je viens d'obtenir null quand je fais:

Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapdata, 0, bitmapdata.length);

Dans mon cas, bitmapdata n'a que le buffer des pixels, il est donc impossible pour la fonction decodeByteArray de deviner quelle est la largeur, la hauteur et les bits de couleur. J'ai donc essayé ceci et cela a fonctionné:

//Create bitmap with width, height, and 4 bytes color (RGBA)    
Bitmap bmp = Bitmap.createBitmap(imageWidth, imageHeight, Bitmap.Config.ARGB_8888);
ByteBuffer buffer = ByteBuffer.wrap(bitmapdata);
bmp.copyPixelsFromBuffer(buffer);

Vérifiez https://developer.android.com/reference/android/graphics/Bitmap.Config.html pour les différentes options de couleur

julien
la source
2
qu'est-ce que mBitmaps?
user924