首页 > 解决方案 > Android CameraX 拍照前如何确保对焦?(应该是一个很常用的功能!)

问题描述

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

第一次尝试:像官方示例takePicture中所做的那样简单地调用。

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

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

代码如:

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

问题:集中注意力需要很长时间(几秒钟!)。用户绝对不能接受。

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

感谢您的任何建议!

标签: javaandroidkotlincameraandroid-camerax

解决方案


我找到了答案!只需调用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;

啊哈!


推荐阅读