我得到的错误是我的缓冲区对于像素来说不够大。有什么建议吗?Bitmap b 应该与我试图将其像素放入的 gSaveBitmap 大小相同。
if(gBuffer == null)
{
Bitmap b = Bitmap.createScaledBitmap(gBitmap, mWidth, mHeight, false);
//gBuffer = ByteBuffer.allocateDirect(b.getRowBytes()*b.getHeight()*4);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 100, stream);
gBuffer = ByteBuffer.wrap(stream.toByteArray());
b.recycle();
}
gSaveBitmap.copyPixelsFromBuffer(gBuffer);
更新:下面的代码给出了完全相同的错误,但不涉及任何压缩。
if(gBuffer == null)
{
Bitmap b = Bitmap.createScaledBitmap(gBitmap, mWidth, mHeight, false);
int bytes = b.getWidth()*b.getHeight()*4;
gBuffer = ByteBuffer.allocate(bytes);
b.copyPixelsToBuffer(gBuffer);
b.recycle();
}
gSaveBitmap.copyPixelsFromBuffer(gBuffer);
更新:通过将 gBuffer 的大小加倍解决了这个问题。也许有人可以告诉我为什么这是正确的尺寸。另外...图片旋转错误,需要旋转90度。任何想法如何在 gBuffer 中重新排列数据?
gBuffer = ByteBuffer.allocate(b.getRowBytes()*b.getHeight()*2);