So konvertieren Sie ein Byte-Array in Bitmap


123

Ich möchte das Bild in speichern SQLite DataBase. Ich habe versucht, es mit zu speichern, BLOBund Stringin beiden Fällen speichert es das Bild und kann es abrufen, aber wenn ich es in die BitmapVerwendung konvertiere, wird BitmapFactory.decodeByteArray(...)null zurückgegeben.

Ich habe diesen Code verwendet, aber er gibt null zurück

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

4
Bitte lesen Sie die ersten 5-10 Links im Abschnitt "Verwandte" auf dieser Seite.
Mat

2
Haben Sie die Bitmap vor dem Schreiben in die Datenbank codiert?
Ronnie

Antworten:


284

Versuchen Sie einfach Folgendes:

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();

Wenn bitmapdataes sich um das Byte-Array Bitmaphandelt, erfolgt das Abrufen folgendermaßen:

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

Gibt das dekodierte Bild zurück Bitmapoder nullwenn das Bild nicht dekodiert werden konnte.


2
Bild konnte nicht dekodiert werden, wenn es in einem anderen Format ist, von dem Sie versuchen zu dekodieren
lxknvlk

2
Was ist, wenn ich eine solche Operation mehrmals hintereinander ausführen muss? Ist es nicht ressourcenintensiv, jedes Mal ein neues Bitmap-Objekt zu erstellen? Kann ich mein Array irgendwie in eine vorhandene Bitmap dekodieren?
Alex Semeniuk

Ich poste eine andere Antwort, wenn Sie nur einen Puffer des Bildpixels haben. Ich wurde immer null wegen des Mangels an Mit, Höhe und Farbe in meinem Puffer. Ich hoffe es hilft!
Julian

31

Die Antwort von Uttam hat bei mir nicht funktioniert. Ich habe gerade null bekommen, wenn ich:

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

In meinem Fall enthält Bitmapdata nur den Puffer der Pixel, sodass die Funktion decodeByteArray nicht erraten kann, welche Bits für Breite, Höhe und Farbe verwendet werden. Also habe ich es versucht und es hat funktioniert:

//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);

Überprüfen Sie https://developer.android.com/reference/android/graphics/Bitmap.Config.html auf verschiedene Farboptionen


2
Was ist mBitmaps?
user924
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.