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
更多关于HarmonyOS 鸿蒙Next中调用相机,如何解决设置焦距后无法对焦问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中调用相机时,若设置焦距后无法对焦
在HarmonyOS鸿蒙Next中调用相机时,若设置焦距后无法对焦,可能是由于焦距设置超出了设备的物理限制或未正确配置相机参数。
首先,确保使用的焦距值在设备支持的范围内,可通过CameraCapability
类获取设备的最小和最大焦距值。
其次,检查是否在设置焦距后调用了focusMode
为FOCUS_MODE_CONTINUOUS_VIDEO
或FOCUS_MODE_CONTINUOUS_PICTURE
,以确保相机能够自动对焦。
如果问题仍然存在,尝试重新初始化相机实例或重启设备。