AVFoundation 相机的正确 ISO 值
Correct ISO value for AVFoundation camera
在使用 AVFoundation
时,我使用这两个属性来了解设备相机可以使用的最小和最大 ISO:
AVCaptureDeviceFormat *activeFormat = _videoDevice.activeFormat;
minISO = activeFormat.minISO;
maxISO = activeFormat.maxISO;
但是这些行给我以下结果:
minISO = 23
maxISO = 736
但是没有 ISO 23 或 736 这样的东西。事实上,如果你用 ISO 23 调整相机,它会自动调整为 ISO 50,而 ISO 736 会使相机调整为 ISO 800。
有没有办法在设置之前知道给定相机可以使用的真实 ISO?
它基于胶卷速度。最常见的 ISO 值从 25 开始,以下值为双倍值(例如 50、100、200、400)。 Wikipedia: Film Speed 列出所有值。
您可以定义标准 ISO 值列表:
let isos: [Float] = [32, 50, 64, 80, 100, 125, 160, 200, 250, 320, 400, 500, 640, 800, 1000, 1250, 1600, 1800]
并且在通过最小和最大 ISO 值初始化捕获设备过滤器之后:
var isos_available: [Float] = []
for one_iso in isos {
if one_iso >= min_iso && one_iso <= max_iso {
isos_available.append(one_iso)
}
}
还有快门速度:
var shutters: [Float] = [1, 2, 4, 8, 15, 30, 60, 125, 250, 500, 1000, 2000, 4000, 8000]
var shutters_available: [Float] = []
let min_seconds = CMTimeGetSeconds(self.device.activeFormat.minExposureDuration)
let max_seconds = CMTimeGetSeconds(self.device.activeFormat.maxExposureDuration)
for one_shutter in shutters {
let seconds = 1.0 / Float64(one_shutter)
if seconds >= min_seconds && seconds <= max_seconds {
shutters_available.append(one_shutter)
}
}
在使用 AVFoundation
时,我使用这两个属性来了解设备相机可以使用的最小和最大 ISO:
AVCaptureDeviceFormat *activeFormat = _videoDevice.activeFormat;
minISO = activeFormat.minISO;
maxISO = activeFormat.maxISO;
但是这些行给我以下结果:
minISO = 23
maxISO = 736
但是没有 ISO 23 或 736 这样的东西。事实上,如果你用 ISO 23 调整相机,它会自动调整为 ISO 50,而 ISO 736 会使相机调整为 ISO 800。
有没有办法在设置之前知道给定相机可以使用的真实 ISO?
它基于胶卷速度。最常见的 ISO 值从 25 开始,以下值为双倍值(例如 50、100、200、400)。 Wikipedia: Film Speed 列出所有值。
您可以定义标准 ISO 值列表:
let isos: [Float] = [32, 50, 64, 80, 100, 125, 160, 200, 250, 320, 400, 500, 640, 800, 1000, 1250, 1600, 1800]
并且在通过最小和最大 ISO 值初始化捕获设备过滤器之后:
var isos_available: [Float] = []
for one_iso in isos {
if one_iso >= min_iso && one_iso <= max_iso {
isos_available.append(one_iso)
}
}
还有快门速度:
var shutters: [Float] = [1, 2, 4, 8, 15, 30, 60, 125, 250, 500, 1000, 2000, 4000, 8000]
var shutters_available: [Float] = []
let min_seconds = CMTimeGetSeconds(self.device.activeFormat.minExposureDuration)
let max_seconds = CMTimeGetSeconds(self.device.activeFormat.maxExposureDuration)
for one_shutter in shutters {
let seconds = 1.0 / Float64(one_shutter)
if seconds >= min_seconds && seconds <= max_seconds {
shutters_available.append(one_shutter)
}
}