web-dev-qa-db-fra.com

Comment convertir un tableau d'octets en bitmap

Je veux stocker une image dans SQLite DataBase. J'ai essayé de le stocker en utilisant BLOB et String, dans les deux cas, il stocke l'image et peut le récupérer, mais lorsque je le convertis en Bitmap en utilisant BitmapFactory.decodeByteArray(...), il renvoie null.

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

Bitmap  bitmap = BitmapFactory.decodeByteArray(blob, 0, blob.length);
106
Vasu

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 bitmapdata est le tableau d'octets, alors obtenir Bitmap se fait comme suit:

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

Renvoie le Bitmap décodé, ou null si l'image n'a pas pu être décodée.

264
Uttam

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

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

Dans mon cas, bitmapdata n'a que la mémoire tampon des pixels, il est donc impossible pour la fonction decodeByteArray de deviner quelle largeur, hauteur et quelle couleur utiliseront les bits. Alors j'ai essayé ça et ça a marché:

//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 différentes options de couleur

24
Julian