Android Camera2:自动对焦和曝光

KTB*_*KTB 1 android android-camera2

在我的Android相机应用程序中,我正在使用Camera2 API.应用程序没有显示相机的预览,我已经以某种方式实现了它,当按下UI上的按钮时,它会拍摄图像.但问题在于自动对焦和自动曝光.简单地说,我需要将相机始终集中在视图的中间.因此,在构建请求时,我添加了以下属性:

captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_AUTO);
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
captureBuilder.set(CaptureRequest.CONTROL_AWB_MODE, CaptureRequest.CONTROL_AWB_MODE_AUTO);
captureBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_START);
captureBuilder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, CameraMetadata.CONTROL_AE_PRECAPTURE_TRIGGER_START);  
Run Code Online (Sandbox Code Playgroud)

但问题仍然是图像没有集中.

我有几个问题:

我是否需要在里面的方法中实现一些检查CameraCaptureSession.CaptureCallback

我也注意到,在onImageAvailable调用的时候ImageReader.OnImageAvailableListener,没有触发onCaptureProgressed方法CameraCaptureSession.CaptureCallback.

我在这里缺少什么?我是否需要实现一个线程来等待相机聚焦,这将在按下拍照按钮时开始.

请注意,此应用程序没有相机预览.

Edd*_*ala 6

您只发送一个捕获请求吗?或者您是在后台运行重复请求,然后仅在按下按钮时发出高分辨率捕获?

前者不会真正起作用 - 您必须有一系列请求才能使自动曝光,聚焦和白平衡算法收敛到良好的值.单个捕获将无法正确计量或聚焦.

请看看Camera2Basic样本; 如果您只使用SurfaceTexture替换该示例中的TextureView(给它一个随机纹理ID并且不调用updateTexImage),那么您可以不进行预览.但它正确地实现了聚焦和预捕带触发,这对你来说至关重要.例如,触发器只能在一个请求上设置,然后您需要观察捕获结果,以查看曝光/聚焦状态何时变为FOCUSED或CONVERGED.

我还建议使用CONTINUOUS_PICTURE焦点模式而不是AUTO; 它可能会更快地为您提供聚焦图像.