Jak przekonwertować tablicę bajtów na mapę bitową

123

Chcę przechowywać obraz w SQLite DataBase. Próbowałem go zapisać za pomocą BLOBiw Stringobu przypadkach przechowuje obraz i może go odzyskać, ale kiedy przekonwertuję go na Bitmapużycie BitmapFactory.decodeByteArray(...), zwracam wartość null.

Użyłem tego kodu, ale zwraca on null

Bitmap  bitmap = BitmapFactory.decodeByteArray(blob, 0, blob.length);
Vasu
źródło
4
Przeczytaj pierwsze 5–10 linków w sekcji „Powiązane” na tej stronie.
Mat
2
Czy zakodowałeś bitmapę przed zapisaniem do bazy danych?
Ronnie

Odpowiedzi:

284

Po prostu spróbuj tego:

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

Jeśli bitmapdatajest tablicą bajtów, pobieranie Bitmapodbywa się w następujący sposób:

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

Zwraca zdekodowany Bitmaplub nulljeśli nie można zdekodować obrazu.

Uttam
źródło
2
obraz nie może zostać zdekodowany, jeśli jest w innym formacie, z którego próbujesz zdekodować
lxknvlk
2
Co się stanie, jeśli będę musiał wykonać taką operację wiele razy po kolei? Czy tworzenie nowego obiektu Bitmap za każdym razem nie pochłania zasobów? Czy mogę w jakiś sposób zdekodować moją tablicę do istniejącej mapy bitowej?
Alex Semeniuk
Podaję inną odpowiedź, gdy masz tylko bufor piksela obrazu. Zawsze stawałem się zerowy z powodu braku z, wysokości i koloru w moim buforze. Mam nadzieję, że to pomoże!
Julian
31

Odpowiedź Uttama nie zadziałała dla mnie. Właśnie uzyskałem wartość zerową, gdy:

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

W moim przypadku bitmapdata ma tylko bufor pikseli, więc funkcja decodeByteArray nie może odgadnąć, jakiej szerokości, wysokości i koloru używają bity. Więc spróbowałem tego i zadziałało:

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

Sprawdź https://developer.android.com/reference/android/graphics/Bitmap.Config.html dla różnych opcji kolorów

juliański
źródło
2
co to jest mBitmaps?
user924