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

Bitmap.createBitmap创建位图时抛出IllegalArgumentException异常排查

Android 位图处理 createBitmap 调用 IllegalArgumentException 异常排查

问题背景

开发Android位图处理逻辑时,在Bitmap.createBitmap()调用位置触发IllegalArgumentException,对应实现代码如下:

val sourceBitmap = resizeImageWithAspectRatio(bitmap, scaleImage) ?: return null
var maxHeight: Int = (scaleImage * .19).roundToInt()
if(maxHeight == 0) maxHeight = 1
val resultBitmap = Bitmap.createBitmap(
    maxHeight,
    maxHeight,
    Bitmap.Config.ARGB_8888
)

已知该异常的常见触发场景是传入宽高参数为0,但代码中已经添加了maxHeight为0时赋值为1的兜底逻辑,排除参数为0的场景后,异常还有以下可能触发原因:

  • 传入的宽高参数为负数:现有逻辑仅对maxHeight等于0的场景做了兜底,没有处理负数情况。如果上游传入的scaleImage参数本身为负值(比如参数传递错误、前置缩放逻辑计算异常),scaleImage * 0.19的结果经roundToInt()转换后会得到负整数,传入负数宽高调用createBitmap会直接抛出参数非法异常。
  • Bitmap内存分配失败被判定为参数非法:并非所有内存分配失败都会抛出OutOfMemoryError,部分Android版本、定制ROM的Bitmap实现在native层申请对应像素内存失败时(比如计算得到的位图大小超过应用单Bitmap内存分配阈值、应用当前剩余可用内存不足),会直接抛出IllegalArgumentException,而非OOM。
  • Bitmap.Config 参数不兼容:如果运行设备系统版本过低不支持指定的像素配置、定制ROM存在框架层修改导致Config常量取值异常、或者开启硬件加速后Config被隐式替换为仅高版本支持的HARDWARE类型,都会导致createBitmap校验配置参数不通过,抛出异常。
  • 线程环境异常:如果在未初始化渲染上下文的子线程中创建依赖硬件加速的位图,部分系统会判定创建参数不合法抛出异常,而非明确的线程错误。

排查时可以先在createBitmap调用前加日志打印maxHeight的实际取值、当前应用剩余内存、当前使用的Config类型,能快速定位根因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:03:32