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.