Edd*_*ala 13
确定您的设备是否支持手动ISO控制的一种方法是检查它是否支持MANUAL_SENSOR功能.
如果是这样,您可以通过禁用所有自动设置来关闭自动曝光:
previewBuilder.set(CaptureRequest.CONTROL_MODE, CaptureRequest.CONTROL_MODE_OFF);
Run Code Online (Sandbox Code Playgroud)
或者只是禁用自动曝光,让自动对焦和自动白平衡运行:
previewBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
Run Code Online (Sandbox Code Playgroud)
一旦禁用AE,您可以手动控制曝光时间,灵敏度(ISO)和帧持续时间):
previewBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, exposureTime);
previewBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, sensitivity);
previewBuilder.set(CaptureRequest.SENSOR_FRAME_DURATION, frameDuration);
Run Code Online (Sandbox Code Playgroud)
这些值的有效范围可以从SENSOR_INFO_EXPOSURE_TIME_RANGE和SENSOR_INFO_SENSITIVITY_RANGE中找到,用于曝光和灵敏度.对于帧持续时间,可以从SENSOR_INFO_MAX_DURATION找到最大帧持续时间,最小帧持续时间(最大帧速率)取决于您的会话输出配置.有关详细信息,请参阅StreamConfigurationMap.getOutputMinFrameDuration.
请注意,一旦禁用AE,您必须控制所有3个参数(如果您从未设置过,则有默认值,但它们不会自动变化).在关闭AE之前,您可以从最后一次CaptureResult复制最后一个好的值.
你必须previewbuilder先这样设置:
mPreviewBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_FULL);
Run Code Online (Sandbox Code Playgroud)
然后
Range<Integer> range2 = characteristics.get(CameraCharacteristics.SENSOR_INFO_SENSITIVITY_RANGE);
int max1 = range2.getUpper();//10000
int min1 = range2.getLower();//100
int iso = ((progress * (max1 - min1)) / 100 + min1);
mPreviewBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, iso);
Run Code Online (Sandbox Code Playgroud)
progressonProgressChanged(SeekBar seekBar, int progress, boolean user)是来自覆盖方法的seekBar的变量
| 归档时间: |
|
| 查看次数: |
12981 次 |
| 最近记录: |