Cómo convertir una matriz de bytes a mapa de bits

123

Quiero almacenar la imagen en formato SQLite DataBase. Traté de almacenarlo usando BLOBy String, en ambos casos, almacena la imagen y puede recuperarla, pero cuando la convierto para Bitmapusarla BitmapFactory.decodeByteArray(...), devuelve nulo.

He usado este código, pero devuelve nulo.

Bitmap  bitmap = BitmapFactory.decodeByteArray(blob, 0, blob.length);
Vasu
fuente
4
Lea los primeros 5-10 enlaces en la sección "Relacionados" de esta página.
Mat
2
¿Codificó el mapa de bits antes de escribir en la base de datos?
Ronnie

Respuestas:

284

Intenta esto:

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 bitmapdataes la matriz de bytes, la obtención Bitmapse realiza así:

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

Devuelve el decodificado Bitmap, o nullsi la imagen no se pudo decodificar.

Uttam
fuente
2
la imagen no se pudo decodificar si está en otro formato desde el que está intentando decodificar
lxknvlk
2
¿Qué pasa si necesito realizar una operación de este tipo muchas veces en secuencia? ¿No consume muchos recursos crear un nuevo objeto de mapa de bits cada vez? ¿Puedo de alguna manera decodificar mi matriz en un mapa de bits existente?
Alex Semeniuk
Publico una respuesta diferente cuando solo tienes un búfer del píxel de la imagen. Siempre obtenía un valor nulo debido a la falta de con, altura y color en mi búfer. ¡Espero eso ayude!
Julian
31

La respuesta de Uttam no funcionó para mí. Acabo de obtener nulo cuando lo hago:

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

En mi caso, bitmapdata solo tiene el búfer de los píxeles, por lo que es imposible que la función decodeByteArray adivine qué bits de ancho, alto y color usan. Así que probé esto y funcionó:

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

Consulte https://developer.android.com/reference/android/graphics/Bitmap.Config.html para conocer las diferentes opciones de color

Julian
fuente
2
¿Qué es mBitmaps?
user924