Come convertire un array di byte in bitmap


123

Voglio memorizzare l'immagine in formato SQLite DataBase. Ho provato a memorizzarlo usando BLOBe String, in entrambi i casi memorizza l'immagine e può recuperarla ma quando lo converto per Bitmapusarlo BitmapFactory.decodeByteArray(...)restituisce null.

Ho usato questo codice, ma restituisce null

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

4
Si prega di leggere i primi 5-10 collegamenti nella sezione "Correlati" in questa pagina.
Sabato

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

Risposte:


284

Prova 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, il recupero Bitmapviene eseguito in questo modo:

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

Restituisce il decodificato Bitmapo nullse l'immagine non può essere decodificata.


2
l'immagine non può essere decodificata se è in un altro formato da cui si sta tentando di decodificare
lxknvlk

2
Cosa succede se devo eseguire un'operazione del genere molte volte in sequenza? Non è dispendioso in termini di risorse creare ogni volta un nuovo oggetto Bitmap? Posso in qualche modo decodificare il mio array in bitmap esistente?
Alex Semeniuk

Inserisco una risposta diversa quando hai solo un buffer del pixel dell'immagine. Stavo diventando sempre nullo a causa della mancanza di con, altezza e colore nel mio buffer. Spero che sia d'aiuto!
Julian

31

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

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

Nel mio caso, bitmapdata ha solo il buffer dei pixel, quindi non è possibile per la funzione decodeByteArray indovinare quale sia la larghezza, l'altezza e i bit di colore utilizzati. Quindi 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(bitmapdata);
bmp.copyPixelsFromBuffer(buffer);

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


2
cos'è mBitmaps?
user924
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.