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

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.


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


2
o que é mBitmaps?
— user924
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.