加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – RuntimeException:缓冲区不足以容纳像素

发布时间:2020-12-15 04:18:18 所属栏目:Java 来源:网络整理
导读:我通过套接字在字节数组中收到一个Bitmap,我读了它然后我想在我的应用程序中将它设置为os.toByteArray作为 ImageView.我使用的代码是: try { //bmp = BitmapFactory.decodeByteArray(result,result.length); bitmap_tmp = Bitmap.createBitmap(540,719,Bitm
我通过套接字在字节数组中收到一个Bitmap,我读了它然后我想在我的应用程序中将它设置为os.toByteArray作为 ImageView.我使用的代码是:

try {
    //bmp = BitmapFactory.decodeByteArray(result,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,上次Bitmap在4.4之前的Grepcode上更新)

错误的措辞有点不清楚,但代码澄清 – 这意味着您的缓冲区计算为没有足够的数据来填充位图的像素.
这是(可能)因为它们使用缓冲区的remaining()方法来计算缓冲区的容量,该方法考虑了其position属性的当前值.如果在调用copyFromPixels()之前在缓冲区上调用rewind(),则可能会看到运行时异常消失.我说’可能’因为ByteBuffer :: wrap()方法应该将position属性值设置为零,不需要调用rewind,但是根据类似的问题判断我自己的经验明确地重置位置可能会有所帮助.

尝试

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读