Декодируйте массив байтов в bitmap, который был сжат в Java

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

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 ответов


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

Я изменил

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

to

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

и он работает, как ожидалось.