2011-10-01 18 views
77

Desidero memorizzare l'immagine in SQLite DataBase. Ho provato a memorizzarlo utilizzando BLOB e String, in entrambi i casi viene memorizzata l'immagine e può recuperarla ma quando la converto in Bitmap utilizzando BitmapFactory.decodeByteArray(...) restituisce null.Come convertire l'array di byte in Bitmap

Ho usato questo codice, ma restituisce null

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

Si prega di leggere i primi 5-10 collegamenti nella sezione "correlate" a questa pagina. – Mat

+0

Hai codificato la bitmap prima di scrivere nel database? – Ronnie

risposta

200

Basta provare questo:

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

Se bitmapdata è l'array di byte quindi ottenere Bitmap è fatto in questo modo:

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

Restituisce il decodificato Bitmap o null se l'immagine non può essere decodificata.

+13

quando l'immagine non può essere decodificata? L'immagine –

+2

non può essere decodificata se è in un altro formato che si sta tentando di decodificare da – lxknvlk

+1

Cosa succede se ho bisogno di eseguire questa operazione molte volte in sequenza? Non è un consumo di risorse per creare ogni volta un nuovo oggetto Bitmap? Posso in qualche modo decodificare il mio array in bitmap esistente? –

8

La risposta di Uttam non ha funzionato per me. Sono appena nullo quando faccio:

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

Nel mio caso, bitmapData ha solo il buffer dei pixel, quindi è imposible per la funzione decodeByteArray indovinare quale la larghezza, l'altezza ei bit colori utilizzano. Così ho provato questo e ha funzionato:

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

Controllare https://developer.android.com/reference/android/graphics/Bitmap.Config.html per le diverse opzioni di colore

Problemi correlati