鸿蒙NEXT开发实战往期必看文章:

一分钟了解”纯血版!鸿蒙HarmonyOS Next应用开发!

“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通)

HarmonyOS NEXT应用开发案例实践总结合(持续更新......)

HarmonyOS NEXT应用开发性能优化实践总结(持续更新......)


相机框架提供对设备对焦的能力,业务应用可以根据使用场景进行对焦模式和对焦点的设置。

开发步骤

详细的API说明请参考Camera API参考

  1. 导入相关接口,导入方法如下。

    import { camera } from '@kit.CameraKit';
    import { BusinessError } from '@kit.BasicServicesKit';
  2. 在设置对焦模式前,需要先调用isFocusModeSupported检查设备是否支持指定的焦距模式。

    说明

    需要在Session调用commitConfig完成配流之后调用。

    function isFocusModeSupported(photoSession: camera.PhotoSession): boolean {
      let status: boolean = false;
      try {
        // 以检查是否支持连续自动对焦模式为例
        status = photoSession.isFocusModeSupported(camera.FocusMode.FOCUS_MODE_CONTINUOUS_AUTO);
      } catch (error) {
        // 失败返回错误码error.code并处理
        let err = error as BusinessError;
        console.error(`The isFocusModeSupported call failed. error code: ${err.code}`);
      }
      return status;
    }
  3. 调用setFocusMode设置对焦模式。

    若设置为自动对焦模式,支持调用setFocusPoint设置对焦点,根据对焦点执行一次自动对焦。

    说明

    需要在Session调用commitConfig完成配流之后调用。

    function setFocusMode(photoSession: camera.PhotoSession): void {
      const focusPoint: camera.Point = {x: 1, y: 1};
      try {
        // 设置自动对焦模式
        photoSession.setFocusMode(camera.FocusMode.FOCUS_MODE_AUTO);
        // 设置对焦点
        photoSession.setFocusPoint(focusPoint);
      } catch (error) {
        // 失败返回错误码error.code并处理
        let err = error as BusinessError;
        console.error(`The setFocusMode and setFocusPoint call failed. error code: ${err.code}`);
      }
    }

状态监听

在相机应用开发过程中,可以随时监听相机聚焦的状态变化。

通过注册focusStateChange的回调函数获取监听结果,仅当自动对焦模式时,且相机对焦状态发生改变时触发该事件。

function onFocusStateChange(photoSession: camera.PhotoSession): void {
  photoSession.on('focusStateChange', (err: BusinessError, focusState: camera.FocusState) => {
    if (err !== undefined && err.code !== 0) {
      console.error(`focusStateChange error code: ${err.code}`);
      return;
    }
    console.info(`focusStateChange focusState: ${focusState}`);
    // 为保证对焦功能的用户体验,在自动对焦成功后,可将对焦模式设置为连续自动对焦
    if (focusState == camera.FocusState.FOCUS_STATE_FOCUSED) {
      photoSession.setFocusMode(camera.FocusMode.FOCUS_MODE_CONTINUOUS_AUTO);
    }
  });
}

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐