gpt4 book ai didi

java - 运行时异常 : Buffer not large enough for pixels

转载 作者:太空宇宙 更新时间:2023-11-03 12:08:03 37 4
gpt4 key购买 nike

我通过套接字接收字节数组中的位图并读取它,然后我想在我的应用程序中将它设置为 os.toByteArray 作为 ImageView。我使用的代码是:

try {
//bmp = BitmapFactory.decodeByteArray(result, 0, result.length);
bitmap_tmp = Bitmap.createBitmap(540, 719, Bitmap.Config.ARGB_8888);
ByteBuffer buffer = ByteBuffer.wrap(os.toByteArray());

bitmap_tmp.copyPixelsFromBuffer(buffer);
Log.d("Server",result+"Length:"+result.length);
runOnUiThread(new Runnable() {
@Override
public void run() {
imageView.setImageBitmap(bitmap_tmp);
}
});
return bmp;
} finally {
}

当我运行我的应用程序并开始接收 Byte[] 并期望 ImageView 发生变化时,它没有。

LogCat 说:

java.lang.RuntimeException: Buffer not large enough for pixels at
android.graphics.Bitmap.copyPixelsFromBuffer

我搜索了类似的问题,但找不到解决我的问题的方法。

最佳答案

查看 Bitmap::copyPixelsFromBuffer() 的源代码(版本 2.3.4_r1,最后一次在 Grepcode 上更新 4.4 之前的位图)

错误的措辞有点不清楚,但代码澄清了——这意味着您的缓冲区被计算为没有足够的数据来填充位图的像素。这(可能)是因为他们使用缓冲区的 remaining() 方法来计算缓冲区的容量,该方法考虑了其位置属性的当前值。如果在调用 copyFromPixels() 之前对缓冲区调用 rewind(),您可能会看到运行时异常消失。我说“可能”是因为 ByteBuffer::wrap() 方法应将位置属性值设置为零,从而无需调用倒带,但根据类似的问题和我自己的经验,明确重置位置可能会成功。

尝试

ByteBuffer buffer = ByteBuffer.wrap(os.toByteArray());
buffer.rewind();
bitmap_tmp.copyPixelsFromBuffer(buffer);

关于java - 运行时异常 : Buffer not large enough for pixels,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22167192/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com