我通过套接字在字节数组中收到一个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 atandroID.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:缓冲区不足以容纳像素所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)