HarmonyOS 鸿蒙Next中调用相机,如何解决设置焦距后无法对焦问题

HarmonyOS 鸿蒙Next中调用相机,如何解决设置焦距后无法对焦问题

【问题现象】

设置完焦距后,不能手动对焦。

PinchGesture({
  .onActionUpdate((event: GestureEvent) => {
  if (event && !this.isStabilization) {
    this.zoom = this.zoom * ((event.scale - 1) * 0.07 + 1)
    this.isShowZoom = true
    if (this.zoom > zoomRatioRange[1]) {
      this.zoom = zoomRatioRange[1]
    } else if (this.zoom < zoomRatioRange[0]) {
      this.zoom = zoomRatioRange[0]
    }
    if (this.isPhoto) {
      setPhotoZoom(this.zoom);
    } else {
      setVideoZoom(this.zoom);
    }
  }
}).onActionEnd(() => {
  this.isShowZoom = false
})

表现为设置焦距后点击对焦无效。

【背景知识】

四种焦距模式FocusMode之间的不同:

  • FOCUS_MODE_MANUAL:手动对焦。通过手动修改相机焦距来改变对焦位置,不支持对焦点设置。
  • FOCUS_MODE_CONTINUOUS_AUTO:连续自动对焦。不支持对焦点设置。
  • FOCUS_MODE_AUTO:自动对焦。支持对焦点设置,可以使用Focus.setFocusPoint设置对焦点,根据对焦点执行一次自动对焦。
  • FOCUS_MODE_LOCKED:对焦锁定。不支持对焦点设置。

参考链接

【定位思路】

设置焦距后,需要重新设置FocusMode才可以生效,由于设置完焦距后没有设置FOCUS_MODE_AUTO(自动对焦模式),导致了问题现象。

【解决方案】

需要设置FocusMode为FOCUS_MODE_AUTO,然后设置point可以实现对焦;不影响设置setZoomRatio。

参考如下核心代码实现:

async setFocusPointCenter() {
  if (photoSession === undefined) {
    return;
  }
  // 设置连续自动变焦模式
  try {
    photoSession.setFocusMode(camera.FocusMode.FOCUS_MODE_AUTO);
  } catch (error) {
    let err = error as BusinessError;
    console.error('Failed to set the focus mode. errorCode = ' + err.code);
  }
  // 设置焦点为中心
  const focusPoint: camera.Point = { x: 0.5, y: 0.5 };
  try {
    photoSession.setFocusPoint(focusPoint);
  } catch (error) {
    // 失败返回错误码error.code并处理
    let err = error as BusinessError;
    console.error(`The setFocusPoint call failed. error code: ${err.code}`);
  }
}
setVariableZoomRatio() {
  // 设置可变焦距比
  try {
    photoSession?.setZoomRatio(++this.zoomRatioNum);
  } catch (error) {
    let err = error as BusinessError;
    console.error('Failed to set the zoom ratio value. errorCode = ' + err.code);
  }
}

【总结】

设置焦距后需要重新设置对焦模式为FOCUS_MODE_AUTO,才能继续对焦。若缺少这一步会导致手动对焦无效。


更多关于HarmonyOS 鸿蒙Next中调用相机,如何解决设置焦距后无法对焦问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next中调用相机,如何解决设置焦距后无法对焦问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中调用相机时,若设置焦距后无法对焦

在HarmonyOS鸿蒙Next中调用相机时,若设置焦距后无法对焦,可能是由于焦距设置超出了设备的物理限制或未正确配置相机参数。

首先,确保使用的焦距值在设备支持的范围内,可通过CameraCapability类获取设备的最小和最大焦距值。

其次,检查是否在设置焦距后调用了focusModeFOCUS_MODE_CONTINUOUS_VIDEOFOCUS_MODE_CONTINUOUS_PICTURE,以确保相机能够自动对焦。

如果问题仍然存在,尝试重新初始化相机实例或重启设备。

回到顶部