Декодировать байтовый массив в растровое изображение, сжатое в Java - PullRequest
6 голосов
/ 09 марта 2011

Я сжимаю растровое изображение следующим образом

Bitmap bmpSig = getMyBitMap();
int size = bmpSig.getWidth() * bmpSig.getHeight();
ByteArrayOutputStream out = new ByteArrayOutputStream(size);
bmpSig.compress(Bitmap.CompressFormat.JPEG, 100, out);   
byte[] bytSig = out.toByteArray();

Затем я пытаюсь отобразить изображение в Android ImageView из массива байтов. Когда я делаю это, я получаю изображение полностью черного цвета.

ImageView myImg = (ImageView) findViewById(R.id.img_view);
myImg.setImageBitmap(BitmapFactory.decodeByteArray(bytSig, 0, bytSig.length));

Я предполагаю, что это потому, что я пропускаю шаг перед BitmapFactory.decodeByteArray (), чтобы обратить сжатие jpeg. Или я неправильно понял, как работает сжатие?

1 Ответ

6 голосов
/ 09 марта 2011

Я не осознавал, что фон моего растрового изображения (из объекта Canvas) был прозрачным. Поскольку это растровое изображение - это просто черные линии на белом фоне, черное изображение из-за сжатия в JPEG, придающее изображению черный фон.

Я изменился

bmpSig.compress(Bitmap.CompressFormat.JPEG, 100, out); 

до

bmpSig.compress(Bitmap.CompressFormat.PNG, 100, out); 

И он работает как положено.

...