-2

如何使用camera2 api在android中自动捕捉照片?api 21 及更高版本没有像 onAutoFocused() 这样的回调。

4

1 回答 1

1

您必须手动触发 AF 和 AE。标准管道是:

  1. 设置CONTROL_AF_TRIGGER为您CONTROL_AF_TRIGGER_START用于预览并通过方法CaptureRequest.Builder提交到会话的。CameraCaptureSession capture调用 capture 后,请记住在 CaptureRequest.Builder 中重置CONTROL_AF_TRIGGERCONTROL_AF_TRIGGER_IDLE进行预览;
  2. 等待 AF 完成检查CaptureResult.CONTROL_AF_STATE of TotalCaptureResult预览回调中是否为CONTROL_AF_STATE_FOCUSED_LOCKED || CONTROL_AF_STATE_NOT_FOCUSED_LOCKED || CONTROL_AF_STATE_PASSIVE_FOCUSED || CONTROL_AF_STATE_PASSIVE_UNFOCUSED
  3. 当 AF 完成时,触发 AE 设置CONTROL_AE_PRECAPTURE_TRIGGER到您用于预览并通过方法提交到会话中。调用 capture 后,请记住在 CaptureRequest.Builder 中重置以进行预览;CONTROL_AE_PRECAPTURE_TRIGGER_STARTCaptureRequest.BuilderCameraCaptureSession captureCONTROL_AE_PRECAPTURE_TRIGGERCONTROL_AE_PRECAPTURE_TRIGGER_IDLE
  4. 等待 AE 完成检查CaptureResult.CONTROL_AE_STATE of TotalCaptureResult预览回调中是否为CONTROL_AE_STATE_CONVERGED || CONTROL_AE_STATE_FLASH_REQUIRED || CONTROL_AE_STATE_LOCKED
  5. 现在您可以拍照,对焦且曝光良好

我也经历过可以同时触发 AF e AE(步骤 1-3)并同时等待它们(步骤 2-4)。

于 2016-10-05T13:48:47.123 回答