在Swift中手动设置iOS摄像头的曝光

时间:2017-07-20 01:37:26

标签: ios swift optimization camera avcapturesession

据我所知,iOS中的相机在拍摄视频和照片时会自动连续调整曝光。

问题:

如何关闭相机的自动曝光?

在Swift代码中,如何将相机的曝光设置为"零"这样曝光对周围环境完全中性而不能补偿光线?

2 个答案:

答案 0 :(得分:2)

您可以通过设置" AVCaptureExposureMode"来设置曝光模式。属性。 Documentation here

var exposureMode: AVCaptureDevice.ExposureMode { get set }

你必须考虑3件事。

1)使用" isExposureModeSupported"

检查设备是否实际支持此功能

2)你必须锁定配置"在调整曝光之前。 Documentation here

3)通过设置ISO和持续时间来调整曝光。您无法将其设置为" 0"

ISO

  

此属性通过a返回传感器对光的敏感度   增益值应用于信号。仅曝光持续时间值   支持minISO和maxISO之间。将导致更高的值   嘈杂的图像。无论如何,都可以随时读取属性值   曝光模式,但只能使用   setExposureModeCustom(duration:iso:completionHandler :)方法。

答案 1 :(得分:0)

如果仅需要最小,当前和最大曝光值,则可以使用以下内容:

快捷键5

    import AVFoundation

    enum Esposure {
        case min, normal, max
        
        func value(device: AVCaptureDevice) -> Float {
            switch self {
            case .min:
                return device.activeFormat.minISO
            case .normal:
                return AVCaptureDevice.currentISO
            case .max:
                return device.activeFormat.maxISO
            }
        }
    }

    func set(exposure: Esposure) {
        guard let device = AVCaptureDevice.default(for: AVMediaType.video) else { return }
        if device.isExposureModeSupported(.custom) {
            do{
                try device.lockForConfiguration()
                device.setExposureModeCustom(duration: AVCaptureDevice.currentExposureDuration, iso: exposure.value(device: device)) { (_) in
                    print("Done Esposure")
                }
                device.unlockForConfiguration()
            }
            catch{
                print("ERROR: \(String(describing: error.localizedDescription))")
            }
        }
    }