Como converter matriz de bytes em bitmap

123

Quero armazenar a imagem SQLite DataBase. Eu tentei armazená-lo usando BLOBe String, em ambos os casos, ele armazena a imagem e pode recuperá-la, mas quando eu a converto em Bitmapusá- BitmapFactory.decodeByteArray(...)la, retornamos null.

Eu usei esse código, mas ele retorna nulo

Bitmap  bitmap = BitmapFactory.decodeByteArray(blob, 0, blob.length);
Vasu
fonte
4
Leia os primeiros 5 a 10 links na seção "Relacionados" nesta página.
Mat
2
Você codificou o bitmap antes de gravar no banco de dados?
Ronnie

Respostas:

284

Apenas tente o seguinte:

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é a matriz de bytes, a obtenção Bitmapé feita assim:

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

Retorna o decodificado Bitmapou nullse a imagem não puder ser decodificada.

Uttam
fonte
2
imagem não pode ser decodificado se ele está em outro formato que você está tentando decodificar a partir
lxknvlk
2
E se eu precisar executar essa operação várias vezes em sequência? Não consome recursos para criar um novo objeto Bitmap toda vez? De alguma forma, posso decodificar minha matriz em bitmap existente?
Alex Semeniuk
Eu posto uma resposta diferente quando você apenas possui um buffer do pixel da imagem. Eu estava ficando sempre nulo por causa da falta de, altura e cor no meu buffer. Espero que ajude!
Julian
31

A resposta de Uttam não funcionou para mim. Acabei de ficar nulo quando:

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

No meu caso, bitmapdata possui apenas o buffer dos pixels, portanto, é impossível que a função decodeByteArray adivinhe qual largura, altura e bits de cor são usados. Então eu tentei isso e funcionou:

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

Verifique https://developer.android.com/reference/android/graphics/Bitmap.Config.html para obter opções de cores diferentes

Julian
fonte
2
o que é mBitmaps?
user924