【问题标题】:disable autofocus in android camerax (camera 2)在android camerax(相机2)中禁用自动对焦
【发布时间】:2021-03-15 06:36:50
【问题描述】:
我正在扫描条形码的项目中,所以我想禁用自动对焦以提高性能。我尝试了很多方法,但它根本不起作用。谁能给我一些帮助?谢谢。
【问题讨论】:
标签:
android
barcode-scanner
android-camera2
android-camerax
【解决方案1】:
如果您真的想关闭自动对焦,您可以在 CameraX 上使用 Camera2CameraControl 类执行此操作。为此,您必须首先将需要的用例绑定到导致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”版本上测试的。
【解决方案2】:
我用
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)