使用AVFoundation
时,我使用这两个属性来了解设备相机可以使用的最小值和最大值ISO
:
AVCaptureDeviceFormat *activeFormat = _videoDevice.activeFormat;
minISO = activeFormat.minISO;
maxISO = activeFormat.maxISO;
但是这些行给了我以下结果:
minISO = 23
maxISO = 736
但是没有ISO
23或736这样的东西。事实上,如果你用ISO
23来调整相机,它会自动调整ISO
50和{{1} 736将使相机调整为ISO
800。
有没有办法知道给定相机在设置之前可以使用的真实ISO
?
答案 0 :(得分:3)
您可以定义标准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)
}
}
答案 1 :(得分:1)
它基于电影速度。最常见的ISO值从25开始,并且以下值是双倍的(例如50,100,200,400)。 Wikipedia: Film Speed列出了所有值。