我正在使用 Camera2 API 构建一个 Android 应用程序,该应用程序使用较短的快门时间,1/1000 和 1/2000。 我可以毫无问题地设置 SENSOR_EXPOSURE_TIME。但我想将 ISO(SENSOR_SENSITIVITY)保持在自动模式。
要设置快门速度,我使用以下代码:
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF); mPreviewRequestBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, EXPOSURE); mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), null, surfaceView.getmBackgroundHandler());
此代码工作正常,但由于 CONTROL_AE_MODE 设置为 CONTROL_AE_MODE_OFF ISO (SENSOR_SENSITIVITY) 也必须手动设置。这是我不想要的,我想将 ISO 保持在自动状态。
有什么办法可以做到这一点或有解决方法吗?
如果您想在使用 Camera2 API 手动设置快门速度的同时将 ISO 保持在自动模式,您可以将 CONTROL_AE_MODE 设置为 CONTROL_AE_MODE_ON 而不是 CONTROL_AE_MODE_OFF。
通过将 CONTROL_AE_MODE 设置为 CONTROL_AE_MODE_ON,相机设备将根据所选的快门速度自动调整 ISO 和其他曝光参数以实现所需的曝光。
这里有一个示例代码片段,它将快门速度设置为 1/1000 秒,同时将 ISO 保持在自动模式:
// Set the desired shutter speed
long exposureTime = 1000000 / 1000; // 1/1000th of a second
mPreviewRequestBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, exposureTime);
// Set the AE mode to ON to enable auto-exposure
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
// Build and set the capture request
mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), null, null);
在此示例中,exposureTime 变量计算为以微秒为单位的 1/1000 秒(即 1000 微秒)。 CONTROL_AE_MODE 设置为 CONTROL_AE_MODE_ON,启用自动曝光并允许相机设备根据需要调整 ISO 和其他曝光参数以实现所需曝光。最后,在CaptureSession上构建并设置捕获请求。
请注意,相机设备使用的实际 ISO 值可能因光照条件和其他因素而异。