【发布时间】:2017-07-20 01:37:26
【问题描述】:
我了解 iOS 中的相机在拍摄视频和照片时会自动连续调整曝光。
问题:
如何关闭相机的自动曝光?
在 Swift 代码中,如何将相机的曝光设置为“零”,以便曝光对周围环境完全中性且不补偿光线?
【问题讨论】:
标签: ios swift optimization camera avcapturesession
我了解 iOS 中的相机在拍摄视频和照片时会自动连续调整曝光。
问题:
如何关闭相机的自动曝光?
在 Swift 代码中,如何将相机的曝光设置为“零”,以便曝光对周围环境完全中性且不补偿光线?
【问题讨论】:
标签: ios swift optimization camera avcapturesession
您可以通过设置“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 }到底是什么意思吗?
如果您只需要最小、当前和最大曝光值,则可以使用以下值:
斯威夫特 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))")
}
}
}
【讨论】: