iOS AVFoundation设置曝光值,以EV为单位

时间:2016-11-28 07:12:21

标签: ios avfoundation

您好我正在构建一个扫描IOS应用程序(BarCode和QRCode)。我有一个更宽的调整曝光值(使图像更亮或更暗,取决于光线条件。我用它来手动设置曝光值

captureDevice.setExposureTargetBias(slider.value, completionHandler: nil)

但我的问题是ExposureTargetBias的最小值和最大值是什么,以便我们可以相应地为min设置maxslider值?

这是调整图像亮度的合适方法还是另一种? (IOS)。

2 个答案:

答案 0 :(得分:2)

使用AVCaptureDeviceFormat中的以下属性获取曝光时间的最小值和最大值。

夫特

var minExposureDuration: CMTime { get }
var maxExposureDuration: CMTime { get }

目标C

@property(nonatomic, readonly) CMTime minExposureDuration;
@property(nonatomic, readonly) CMTime maxExposureDuration;

请注意,您不能直接将这些值设置到滑块中。您可能需要将其设置为0-1作为滑块范围,并执行从滑块值到实际设备曝光持续时间的非线性映射。

以下是Apple AVCam Manual

的示例代码
    self.exposureDurationSlider.minimumValue = 0;
    self.exposureDurationSlider.maximumValue = 1;
    double exposureDurationSeconds = CMTimeGetSeconds( self.videoDevice.exposureDuration );
    double minExposureDurationSeconds = MAX( CMTimeGetSeconds( self.videoDevice.activeFormat.minExposureDuration ), kExposureMinimumDuration );
    double maxExposureDurationSeconds = CMTimeGetSeconds( self.videoDevice.activeFormat.maxExposureDuration );
    // Map from duration to non-linear UI range 0-1
    double p = ( exposureDurationSeconds - minExposureDurationSeconds ) / ( maxExposureDurationSeconds - minExposureDurationSeconds ); // Scale to 0-1
    self.exposureDurationSlider.value = pow( p, 1 / kExposureDurationPower ); // Apply inverse power
    self.exposureDurationSlider.enabled = ( self.videoDevice && self.videoDevice.exposureMode == AVCaptureExposureModeCustom );

如果您想要清晰了解QR码,您可能需要检查焦点,白平衡等其他属性。

答案 1 :(得分:2)

您可以将captureDevice.minExposureTargetBiascaptureDevice.maxExposureTargetBias用作滑块的最小值和最大值。