在 Swift 中手动设置 iOS 相机的曝光



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

问题:

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

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

您可以通过设置"AVCaptureExposureMode"属性来设置曝光模式。文档在这里。

var exposureMode: AVCaptureDevice.ExposureMode { get set }

您必须考虑的 3 件事。

1(检查设备是否真的支持"isExposureModeSupported",这

2(在调整曝光之前,您必须"锁定配置"。文档在这里。

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

.ISO:

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

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

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

最新更新