【问题标题】:Manually set exposure for iOS camera in Swift在 Swift 中手动设置 iOS 相机的曝光
【发布时间】:2017-07-20 01:37:26
【问题描述】:

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

问题:

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

在 Swift 代码中,如何将相机的曝光设置为“零”,以便曝光对周围环境完全中性且不补偿光线?

【问题讨论】:

    标签: ios swift optimization camera avcapturesession


    【解决方案1】:

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

    var exposureMode: AVCaptureDevice.ExposureMode { get set }
    

    您必须考虑的三件事。

    1) 检查设备是否真的支持“isExposureModeSupported”

    2) 在调整曝光之前,您必须“锁定配置”。 Documentation here.

    3) 通过设置 ISO 和持续时间来调整曝光。您不能只将其设置为“0”

    ISO:

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

    【讨论】:

    • 谢谢。我会试一试。你知道{ get set }到底是什么意思吗?
    • 您可以读取此属性的值或自行设置。如果它没有“设置”,则意味着这是一个只读属性。
    【解决方案2】:

    如果您只需要最小、当前和最大曝光值,则可以使用以下值:

    斯威夫特 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))")
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2015-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      • 2018-03-11
      • 2019-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多