当我使用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没有显示相同的内容?

最佳答案

在您的代码中,您正在将像素复制到RGB_565格式的位图中,而从中获取像素的原始位图必须采用不同的格式。

copyPixelsFromBuffer()documentation可以清楚地看出问题:



因此,要么使用相同的位图格式,要么使用setPixels()或使用Canvas.drawBitmap()调用将原始位图绘制到新位图上。

还可以使用bm.getWidth()bm.getHeight()来指定新位图的大小,而不是将其硬编码为160

10-06 02:39