当我使用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
。