Новое растровое изображение изменено при копировании с использованием буфера - PullRequest
5 голосов
/ 01 апреля 2012

Когда я использую copyPixelsFromBuffer и copyPixelsToBuffer, растровое изображение не отображается как одно и то же, я попробовал следующий код:

Bitmap bm = BitmapFactory.decodeByteArray(a, 0, a.length);
int[] pixels = new int[bm.getWidth() * bm.getHeight()];
bm.getPixels(pixels, 0, bm.getWidth(), 0, 0,bm.getWidth(),bm.getHeight());

ByteBuffer buffer = ByteBuffer.allocate(bm.getRowBytes()*bm.getHeight());
bm.copyPixelsToBuffer(buffer);//I copy the pixels from Bitmap bm to the buffer

ByteBuffer buffer1 = ByteBuffer.wrap(buffer.array());
newbm = Bitmap.createBitmap(160, 160,Config.RGB_565);
newbm.copyPixelsFromBuffer(buffer1);//I read pixels from the Buffer and put the pixels     to the Bitmap newbm.

imageview1.setImageBitmap(newbm);
imageview2.setImageBitmap(bm);

Почему растровые изображения bm и newbm не отображали одинаковое содержимое?

1 Ответ

0 голосов
/ 01 апреля 2012

В вашем коде вы копируете пиксели в растровое изображение в формате RGB_565, тогда как исходное растровое изображение, из которого вы получили пиксели, должно быть в другом формате.

Проблема ясна из документация из copyPixelsFromBuffer():

Данные в буфере никак не меняются (в отличие от setPixels(), который преобразуется из 32-битного без умножения вкаким бы ни был исходный формат растрового изображения.

Поэтому либо используйте тот же формат растрового изображения, либо используйте setPixels(), либо нарисуйте исходное растровое изображение на новом с помощью вызова Canvas.drawBitmap().

Также используйте bm.getWidth() & bm.getHeight(), чтобы указать размер нового растрового изображения вместо жесткого кодирования как 160.

...