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

ArCore的onUpdate方法获取Bitmap时出现Crop rect is unknown异常如何解决

异常原因

ARCore返回的ArImage实例未实现getCropRect()方法,官方设计上就不支持获取该类图像的裁剪区域,直接调用该接口就会抛出不支持操作异常。

解决方法

无需调用getCropRect()方法,直接使用图像全尺寸作为有效处理区域即可,修改imageToByteBuffer方法的对应代码:

  1. 替换原有获取裁剪区域的代码段
    原有代码:
final Rect crop = image.getCropRect();
final int width = crop.width();
final int height = crop.height();

修改为:

// 直接使用ARCore返回图像的全尺寸作为有效区域
final int width = image.getWidth();
final int height = image.getHeight();
final int cropLeft = 0;
final int cropTop = 0;
  1. 替换后续裁剪偏移的调用
    原有代码:
buffer.position(rowStride * (crop.top >> shift) + pixelStride * (crop.left >> shift));

修改为:

buffer.position(rowStride * (cropTop >> shift) + pixelStride * (cropLeft >> shift));

额外优化建议

  • 当前代码中获取bitmap后直接调用了bitmap.recycle(),如果需要使用生成的bitmap,需要将回收逻辑移动到使用完bitmap之后执行,否则会得到已经被回收的无效bitmap。
  • 100ms延迟的逻辑如果仅为了避免ResourceExhaustedException,也可以替换为加处理标记,保证同一帧仅调用一次acquireCameraImage(),同时避免延迟导致的帧不同步问题。
  • 每次处理都创建RenderScript实例性能开销较大,可以将RenderScript实例改为全局单例,页面销毁时再统一回收。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:54:04