在使用 CameraX 的应用程序中将 LENS_FOCUS_DISTANCE 设置为 Camera2CameraControl 时,它在大多数情况下都有效,但在特定情况下在 Samsung S22 Ultra 设备上不起作用。
设置 LENS_FOCUS_DISTANCE 的代码:
Camera2CameraControl.from(camera.cameraControl).captureRequestOptions = CaptureRequestOptions.Builder()
.apply {
setCaptureRequestOption(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_OFF)
setCaptureRequestOption(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON)
// Fix focus lens distance to infinity to get focus far away (avoid to get a close focus)
setCaptureRequestOption(CaptureRequest.LENS_FOCUS_DISTANCE, 0.0f)
}
.build()
测试用例:
也许 One UI 的三星覆盖层可能会干扰?
我在三星 S22+ 和 S23FE 上遇到了类似的问题(如果不是相同的问题)。在这些设备上将焦距设置为零以实现无限远对焦不会移动镜头,并且会保留相机上次使用的任何对焦级别(例如,如果您使用了三星相机应用程序并聚焦于近距离物体,然后打开您的应用程序要聚焦在无限远,焦点将保持在近处设置)。使用较小的非零焦点值似乎对于天文照片来说效果很好。我使用 1.0e-5 作为折衷方案,但 IIRC 小于 1e-8 左右会表现出与 0.0 相同的行为。