2011-10-01 32 views
77

Quiero almacenar la imagen en SQLite DataBase. Intenté almacenarlo usando BLOB y String, en ambos casos almacenó la imagen y puede recuperarla pero cuando la convierto en Bitmap usando BitmapFactory.decodeByteArray(...) devuelve nulo.Cómo convertir una matriz de bytes a Bitmap

He utilizado este código, pero devuelve un valor nulo

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

Lea los primeros 5-10 enlaces en la sección "relacionada" en esta página. – Mat

+0

¿Codificó el mapa de bits antes de escribir en la base de datos? – Ronnie

Respuesta

200

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 bitmapdata es la matriz de bytes a continuación, obtener Bitmap se hace así:

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

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

+13

¿Cuándo podría la imagen no decodificarse? –

+2

imagen no se pudo decodificar si está en otro formato que está intentando decodificar desde – lxknvlk

+1

¿Qué sucede si tengo que realizar tal operación muchas veces en secuencia? ¿No consume muchos recursos crear un nuevo objeto Bitmap cada vez? ¿Puedo decodificar de alguna manera mi matriz en el mapa de bits existente? –

8

La respuesta de Uttam no funcionó para mí. Me acabo nula cuando lo haga:

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

En mi caso, bitmapData sólo tiene la memoria intermedia de los píxeles, por lo que es imposible para el decodeByteArray función de adivinar cual la anchura, la altura y los bits de color utilizan. Así que he intentado 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(mBitmaps.get(minIndex).buffer); 
bmp.copyPixelsFromBuffer(buffer); 

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

Cuestiones relacionadas