You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android Camera2:onCaptureProgressed与onCaptureCompleted回调差异及"partial result"含义咨询

Android Camera2:onCaptureProgressed与onCaptureCompleted的区别及Partial Result详解

嘿,这个问题问到点子上了!我当初搞Camera2开发的时候,也对着这俩回调懵了好一阵,今天给你把它俩的区别和partial result的含义讲得明明白白~

一、两个回调的核心差异

1. 触发时机完全不同

  • onCaptureCompletedCapture请求彻底结束时才会触发的“最终通知”。不管是拍照、预览还是其他Capture任务,只有当所有相关的图像数据、元数据都生成完毕,整个Capture流程走完,才会调用这个回调。比如你拍一张照片,当全尺寸JPEG文件完全生成、所有拍摄参数都确认无误时,它才会来报到。
  • onCaptureProgressed则是Capture过程中的阶段性反馈,属于“中途报进度”。它不会等整个Capture结束,只要有部分结果可以用了,就会立刻通知你。比如拍照时相机刚完成对焦锁定,或者曝光参数计算完毕,这时候它就会跳出来告诉你当前的状态。

2. 返回的结果内容天差地别

  • onCaptureCompleted返回的是完整的最终结果:包含这次Capture的所有元数据(对焦状态、曝光值、闪光灯状态等等),以及你请求的所有图像输出(比如全分辨率照片、YUV原始数据)。拿到这个回调里的数据,你就可以直接用来保存、展示或者做后续处理了。
  • onCaptureProgressed返回的是Partial Result(部分结果):通常只有部分元数据,或者低分辨率的预览图像,绝对不会包含完整的最终输出。比如它可能只告诉你“对焦已锁定”,或者给你一个小尺寸的缩略预览图,让你提前知道拍摄的大致效果,但最终的高清照片还得等onCaptureCompleted

二、Partial Result到底是什么?

Partial Result直译就是“部分结果”,它是Camera2在处理Capture请求时,提前输出的阶段性数据,核心作用是让你在任务完成前就能获取关键信息,做实时交互反馈

  • 举个实际场景:你打开相机拍照,当相机完成自动对焦后,会通过onCaptureProgressed发送一个partial result,你就可以在UI上显示“对焦成功”的图标;接着曝光参数计算完成,又会发送一个partial result,你可以实时更新屏幕上的曝光数值,让用户直观看到当前的拍摄参数。
  • 要触发partial result,你得在构建CaptureRequest时,把CONTROL_ENABLE_PARTIAL_RESULTS参数设置为true——默认情况下相机是不会主动发送partial result的。
  • 注意:不同设备、不同场景下,onCaptureProgressed的触发次数可能不一样,不要固定依赖它的调用次数;而且partial result里的数据是不完整的,绝对不能用它来替代onCaptureCompleted的最终结果做保存或核心处理。

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

火山引擎 最新活动