You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ByteBuffer转Bitmap崩溃:缓冲空间不足无法填充像素问题

解决Bitmap转换时“缓冲空间不足以容纳像素”的异常

问题原因

你创建的ARGB_8888格式480×640 Bitmap需要的总字节数是480*640*4=1228800,但通过Arrays.copyOfRange(bytes,745488,1228800)得到的temp数组长度仅为1228800-745488=483312,远小于Bitmap所需的字节数,导致copyPixelsFromBuffer时缓冲空间不足。

修复方案

方案1:确保截取的字节数组长度匹配Bitmap需求

确认图片数据在原bytes数组中的正确起始位置,让截取后的temp数组长度刚好等于480*640*4。示例代码:

int requiredSize = 480 * 640 * 4;
int startOffset = // 填写图片数据在bytes数组中的正确起始索引
byte[] temp = Arrays.copyOfRange(bytes, startOffset, startOffset + requiredSize);
Bitmap bitmap = Bitmap.createBitmap(480,640, Bitmap.Config.ARGB_8888);
ByteBuffer buffer = ByteBuffer.wrap(temp);
bitmap.copyPixelsFromBuffer(buffer);
imageView.setImageBitmap(bitmap);

方案2:使用BitmapFactory直接解码字节数组(更推荐)

如果原字节数组是标准图片格式(如JPEG、PNG),无需手动处理像素缓冲,直接用BitmapFactory.decodeByteArray更简单可靠:

// 替换startOffset和imageDataLength为实际的图片数据起始位置和长度
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, startOffset, imageDataLength);
if (bitmap != null) {
    imageView.setImageBitmap(bitmap);
}

额外注意事项

  • 确认原字节数组中的图片数据格式与你指定的Bitmap.Config.ARGB_8888一致,若为RGB_565等其他格式,需调整Bitmap配置,避免字节数不匹配。
  • 处理大图片时注意内存占用,必要时进行压缩,防止内存溢出。

内容的提问来源于stack exchange,提问作者Terry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 19:30:36