2016-11-15 95 views
1

虽然与AVFoundation我用这两个属性知道最小值和最大值ISO工作的设备摄像头可以用:为AVFoundation相机正确的ISO值

AVCaptureDeviceFormat *activeFormat = _videoDevice.activeFormat; 
minISO = activeFormat.minISO; 
maxISO = activeFormat.maxISO; 

但这些线给我下面的结果返回:

minISO = 23 
maxISO = 736 

但是有作为ISO 23或736实际上没有这样的事情,如果你ISO 23调整相机会调整自己, 736将使相机调整到ISO 800.

有没有办法知道真正的ISO s给定相机可以使用之前设置?

回答

2

您可以定义标准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

它基于电影速度。最常见的ISO值从25开始,并且以下值是双倍(例如50,100,200,400)。 Wikipedia: Film Speed列出了所有值。

+0

好吧,我知道,我的意思是这样的:一个特定的设备可以允许范围从50到800,但作为iPhone/iPad进化,它可以从25到1600,3200,6400等。除非我建立一个可能的ISO列表,达到一个荒谬的价值并比较它,但这似乎是一个可以轻松破解的黑客。我预计会收到一系列可能的值,但无论如何。不管怎么说,还是要谢谢你。 – SpaceDog