java – RuntimeException:缓冲区不足以容纳像素
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – RuntimeException:缓冲区不足以容纳像素,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1399字,纯文字阅读大概需要2分钟。
内容图文
![java – RuntimeException:缓冲区不足以容纳像素](/upload/InfoBanner/zyjiaocheng/744/7f260a48ed654e84b0abce61334d0f17.jpg)
我通过套接字在字节数组中收到一个Bitmap,我读了它然后我想在我的应用程序中将它设置为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,上次Bitmap在4.4之前的Grepcode上更新)
错误的措辞有点不清楚,但代码澄清 – 这意味着您的缓冲区计算为没有足够的数据来填充位图的像素.
这是(可能)因为它们使用缓冲区的remaining()方法来计算缓冲区的容量,该方法考虑了其position属性的当前值.如果在调用copyFromPixels()之前在缓冲区上调用rewind(),则可能会看到运行时异常消失.我说’可能’因为ByteBuffer :: wrap()方法应该将position属性值设置为零,不需要调用rewind,但是根据类似的问题判断我自己的经验明确地重置位置可能会有所帮助.
尝试
ByteBuffer buffer = ByteBuffer.wrap(os.toByteArray());
buffer.rewind();
bitmap_tmp.copyPixelsFromBuffer(buffer);
内容总结
以上是互联网集市为您收集整理的java – RuntimeException:缓冲区不足以容纳像素全部内容,希望文章能够帮你解决java – RuntimeException:缓冲区不足以容纳像素所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。