在 android camerax(相机 2)中禁用自动对焦
disable autofocus in android camerax (camera 2)
我在扫描条码的项目中,所以我想禁用自动对焦以提高性能。我尝试了很多方法,但它根本不起作用。谁能给我一些帮助?谢谢。
如果您真的想关闭自动对焦,您可以在 CameraX 上使用 Camera2CameraControl
class 执行此操作。为此,您必须首先将所需的用例绑定到生成 Camera
对象的生命周期,然后您可以使用该相机对象获取 CameraControl
对象,然后使用它来实例化一个Camera2CameraControl
可以让您将对焦模式设置为 CameraMetadata.CONTROL_AF_MODE_OFF
。
val camera : Camera = cameraProvider.bindToLifecycle(
this,
cameraSelector,
imagePreview,
imageCapture,
imageAnalysis
)
val cameraControl : CameraControl = camera.cameraControl
val camera2CameraControl : Camera2CameraControl = Camera2CameraControl.from(cameraControl)
//Then you can set the focus mode you need like this
val captureRequestOptions = CaptureRequestOptions.Builder()
.setCaptureRequestOption(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_OFF)
.build()
camera2CameraControl.captureRequestOptions = captureRequestOptions
这是在最新的 CameraX 的“1.0.0-rc03”版本上测试的。
我用
disableAutoCancel()
使用 cameraX 1.0.0。相机对焦一次然后保持锁定,自动对焦不会每隔 X 秒重新启动,所以像
val autoFocusAction = FocusMeteringAction.Builder(
autoFocusPoint,
FocusMeteringAction.FLAG_AF or
FocusMeteringAction.FLAG_AE or
FocusMeteringAction.FLAG_AWB
).apply {
disableAutoCancel()
}
}.build()
myCameraControl!!.startFocusAndMetering(autoFocusAction)
我在扫描条码的项目中,所以我想禁用自动对焦以提高性能。我尝试了很多方法,但它根本不起作用。谁能给我一些帮助?谢谢。
如果您真的想关闭自动对焦,您可以在 CameraX 上使用 Camera2CameraControl
class 执行此操作。为此,您必须首先将所需的用例绑定到生成 Camera
对象的生命周期,然后您可以使用该相机对象获取 CameraControl
对象,然后使用它来实例化一个Camera2CameraControl
可以让您将对焦模式设置为 CameraMetadata.CONTROL_AF_MODE_OFF
。
val camera : Camera = cameraProvider.bindToLifecycle(
this,
cameraSelector,
imagePreview,
imageCapture,
imageAnalysis
)
val cameraControl : CameraControl = camera.cameraControl
val camera2CameraControl : Camera2CameraControl = Camera2CameraControl.from(cameraControl)
//Then you can set the focus mode you need like this
val captureRequestOptions = CaptureRequestOptions.Builder()
.setCaptureRequestOption(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_OFF)
.build()
camera2CameraControl.captureRequestOptions = captureRequestOptions
这是在最新的 CameraX 的“1.0.0-rc03”版本上测试的。
我用
disableAutoCancel()
使用 cameraX 1.0.0。相机对焦一次然后保持锁定,自动对焦不会每隔 X 秒重新启动,所以像
val autoFocusAction = FocusMeteringAction.Builder(
autoFocusPoint,
FocusMeteringAction.FLAG_AF or
FocusMeteringAction.FLAG_AE or
FocusMeteringAction.FLAG_AWB
).apply {
disableAutoCancel()
}
}.build()
myCameraControl!!.startFocusAndMetering(autoFocusAction)