# 相机对焦模式设置

#### 问题现象

如何在拍照时设置对焦模式？

#### 背景知识

相机框架提供对焦设置的能力，应用可以根据使用场景进行对焦模式和对焦点的设置，具体开发步骤可参考对焦(ArkTS)和对焦(C/C++)。

#### 解决方案

以自动对焦模式为例，可以使用以下方式设置对焦模式为自动对焦：

1.  在设置对焦模式前，需要先调用isFocusModeSupported检查设备是否支持指定的焦距模式，需要在Session调用commitConfig完成配流之后调用。
2.  调用setFocusMode设置对焦模式为camera.FocusMode.FOCUS\_MODE\_AUTO，支持调用setFocusPoint设置对焦点，根据对焦点执行一次自动对焦。具体对焦模式可参考下表：
    
    | 名称 | 值 | 说明 | 适用场景 |
    | --- | --- | --- | --- |
    | FOCUS_MODE_MANUAL | 0 | 手动对焦。通过手动修改相机焦距来改变对焦位置，不支持对焦点设置。 | 当相机和拍摄主体距离，已经近到超过了镜头的最近对焦距离，或在弱光环境下，需要使用手动对焦。 |
    | FOCUS_MODE_CONTINUOUS_AUTO | 1 | 连续自动对焦。不支持对焦点设置。 | 适合用于拍摄移动的主体或者在拍摄过程中需要不断调整焦距的情况。画面会根据预览的内容自动调整，切换焦距或者画面预览都不会模糊。 |
    | FOCUS_MODE_AUTO | 2 | 自动对焦。支持对焦点设置，可以使用setFocusPoint设置对焦点，根据对焦点执行一次自动对焦。 | 系统默认能力，大多数情况下可以成功对焦，适合绝大部分场景。 |
    | FOCUS_MODE_LOCKED | 3 | 对焦锁定。不支持对焦点设置。 | 完成自动对焦后，固定对焦距离，不需要相机再自行改变焦点时使用。 |
    

在相机应用开发过程中，可以随时监听相机聚焦的状态变化，通过注册focusStateChange的回调函数获取监听结果，仅当对焦模式为自动对焦模式，且相机对焦状态发生改变时触发该事件，具体代码可参考对焦-状态监听。

#### 常见FAQ

Q：在进行拍照时，相机对焦发生改变，焦距突然变化。

A：相机框架默认自动对焦能力，可以使用以下方式设置对焦模式为手动对焦：在commitConfig之后执行photoSession.setFocusMode(camera.FocusMode.FOCUS\_MODE\_MANUAL)。

Q：自定义相机进入相机页面时，页面没有聚焦或对焦不明显，拍照会模糊，如何解决？

A：可以将模式设置为this.session.setFocusMode(camera.FocusMode.FOCUS\_MODE\_AUTO)，每次点击后用setFocusPoint对焦点进行设置可以实现。

Q：相机设置连续自动对焦模式后和没设置有什么区别？

A：设置连续自动对焦后画面会根据预览的内容自动调整，在切换焦距或者画面时都不会模糊。