更正AVFoundation相机的ISO值

时间:2016-11-15 07:32:13

标签: ios avfoundation iso

使用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

2 个答案:

答案 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列出了所有值。