Android CameraX 拍照前如何保证对焦? (应该是一个很常用的功能!)

How to ensure focused before taking picture in Android CameraX? (Should be a very commonly used feature!)

我正在使用 CameraX 并想拍照。当然,没有人想要一张模糊的照片,所以我们在拍照之前一定要确保对焦。

第一次尝试:只需调用 takePicture 就像在 official sample 中所做的一样。

问题:我可以切换场景并快速按下拍照按钮。然后,当 takePicture 发生时,相机还没有完成自动对焦。因此,我得到一张模糊的照片:/

第二次尝试:在实际拍照前,先触发对焦,等待对​​焦完成。

代码如下:

camera!!.cameraControl.startFocusAndMetering(
                    FocusMeteringAction.Builder(
                            autoFocusPoint,
                            FocusMeteringAction.FLAG_AF
                    ).apply {
                        //focus only when the user tap the preview
                        disableAutoCancel()
                    }.build()
            )

问题:聚焦需要很长时间(秒!)。用户肯定不能接受。

因此,我想知道我该怎么办?恕我直言,这应该是非常常用的,所以我很惊讶地发现我找不到任何解决方案!我错过了什么吗?

感谢任何建议!

我找到答案了!只需调用 setCaptureMode(ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY).

原因:看ImageCapture的构造函数:

        if (mCaptureMode == CAPTURE_MODE_MAXIMIZE_QUALITY) {
            mEnableCheck3AConverged = true; // check 3A convergence in MAX_QUALITY mode
        } else {
            mEnableCheck3AConverged = false; // skip 3A convergence in MIN_LATENCY mode
        }

那个字段:

    /**
     * A flag to check 3A converged or not.
     *
     * <p>In order to speed up the taking picture process, trigger AF / AE should be skipped when
     * the flag is disabled. Set it to be enabled in the maximum quality mode and disabled in the
     * minimum latency mode.
     */
    private final boolean mEnableCheck3AConverged;

啊哈!