【发布时间】:2026-02-12 13:30:01
【问题描述】:
已弃用的相机 API 为相机对象提供了函数autofocus(),我们可以在检测到我们获得的帧/图像模糊后增加预览/捕获的焦点。
现在我们更新了我们的应用程序以使用 camera2 API,并且仍在尝试弄清楚如何手动触发相机进行自动对焦。对于预览的初始化,我们使用以下代码:
// When the session is ready, we start displaying the preview.
mCaptureSession = cameraCaptureSession;
try {
// Auto focus should be continuous for camera preview.
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
// Flash is automatically enabled when necessary.
setAutoFlash(mPreviewRequestBuilder);
// Finally, we start displaying the camera preview.
mPreviewRequest = mPreviewRequestBuilder.build();
mCaptureSession.setRepeatingRequest(mPreviewRequest,
mCaptureCallback, mBackgroundHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
}
稍后在分析图像质量时访问捕获帧时,如果图像太模糊,我们希望再次触发自动对焦以提高结果质量:
private final ImageReader.OnImageAvailableListener mOnImageAvailableListener
= new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Log.e(TAG, "Image captured!");
Image image = reader.acquireLatestImage();
float focusScore = analyseImage(image);
if(focusScore < 10) {
// Here we would like to trigger some focus functionality
} else {
// Take the result frame as good enough and proceed
}
image.close();
}
};
更新:以下答案也帮助我实施了解决此问题的方法:link
【问题讨论】:
标签: java android android-camera android-camera2