Android Camera2 API:固定快门时间同时保持ISO自动设置方法
解决Camera2 API固定快门时间+自动ISO的方案
要实现固定短快门时间(1/1000、1/2000)同时保持ISO自动,无需关闭AE模式,通过限制AE的快门时间范围即可达成需求:
核心思路
保持AE模式处于开启状态,利用CONTROL_AE_EXPOSURE_TIME_RANGE参数将AE可选择的快门时间范围锁定为你需要的固定值。此时AE算法会自动调整ISO以维持正常曝光,同时快门时间被强制固定为目标值。
代码实现
先将目标快门时间转换为微秒单位:
- 1/1000秒 = 1000000 微秒
- 1/2000秒 = 500000 微秒
修改后的代码如下:
// 保持AE模式开启(可根据场景选择CONTROL_AE_MODE_ON或CONTROL_AE_MODE_ON_AUTO_FLASH) mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON); // 创建快门时间范围,将最小值和最大值设为同一目标值,强制AE使用该快门 Range<Long> fixedExposureRange = new Range<>(EXPOSURE, EXPOSURE); mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_TIME_RANGE, fixedExposureRange); // 提交重复预览请求 mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), null, surfaceView.getmBackgroundHandler());
注意事项
- 设备兼容性检查:部分Android设备可能不支持
CONTROL_AE_EXPOSURE_TIME_RANGE参数,可通过CameraCharacteristics.CONTROL_AE_AVAILABLE_EXPOSURE_TIME_RANGES获取设备支持的快门范围,确认目标值在支持区间内。 - 替代方案(针对不支持的设备):
先开启AE模式获取当前自动ISO值,关闭AE后手动设置快门和该ISO值。但这种方式无法实时自动调整ISO,需要你手动监听画面亮度变化并更新ISO,模拟自动效果。
内容的提问来源于stack exchange,提问作者Marcel Römer
相关产品推荐
相关产品推荐

