我开发了一个Android应用程序来通过camerax扫描二维码。如何在预览时禁用自动对焦?
没试过
public void initCamera(Fragment fragment, OnQRResultListener onQRResultListener) {
mOnQRResultListener = onQRResultListener;
PreviewConfig previewBuild = new PreviewConfig.Builder()
.setTargetResolution(new Size(getWidth(), getHeight()))
.setTargetAspectRatio(new Rational(1, 1))
.setLensFacing(CameraX.LensFacing.FRONT)
.build();
preview = new Preview(previewBuild);
preview.setOnPreviewOutputUpdateListener(new Preview.OnPreviewOutputUpdateListener() {
@Override
public void onUpdated(Preview.PreviewOutput output) {
textureView.setSurfaceTexture(output.getSurfaceTexture());
}
});
HandlerThread analyzerThread = new HandlerThread("BarcodeAnalyzer");
analyzerThread.start();
ImageAnalysisConfig analysisBuild = new ImageAnalysisConfig.Builder()
.setTargetResolution(new Size(getWidth(), getHeight()))
.setTargetAspectRatio(new Rational(1, 1))
.setLensFacing(CameraX.LensFacing.FRONT)
.setImageReaderMode(ImageAnalysis.ImageReaderMode.ACQUIRE_LATEST_IMAGE)
.setCallbackHandler(new Handler(analyzerThread.getLooper()))
.build();
ImageAnalysis analysis = new ImageAnalysis(analysisBuild);
analysis.setAnalyzer(new QRCodeAnalyzer(onAnalyzerResultListener));
CameraX.bindToLifecycle(fragment, preview, analysis);
}
它慢慢扫描二维码结果
请参阅此链接:
另请参阅 stackoverflow 上的这个答案:
https://stackoverflow.com/a/60095886/8401205
这是一个简单的java版本的小代码段:
FocusMeteringAction action = new FocusMeteringAction.Builder(point, FocusMeteringAction.FLAG_AF).disableAutoCancel().build();
您可以使用
cancelFocusAndMetering()
val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener(Runnable {
// Used to bind the lifecycle of cameras to the lifecycle owner
val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()
...
// Bind use cases to camera
val camera = cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageCapture)
camera.cameraControl.cancelFocusAndMetering()
}
为了取消相机的自动对焦,您需要使用Camera2CameraControl API。
val camera2CameraControl : Camera2CameraControl = Camera2CameraControl.from(canera.cameraControl)
val captureRequestOptions = CaptureRequestOptions.Builder()
.setCaptureRequestOption(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_OFF)
camera2CameraControl.captureRequestOptions = captureRequestOptions