对于相机的设置一般都是操作AVCaptureDevice这个类,首先上官方文档:AVCaptureDevice
对于白平衡可能涉及到几个概念(以下是针对官方提供的文档,通过自己427分 的四级英语翻译理解出来的,不对之处请指正)
1.增益 :AVCaptureWhiteBalanceGains
2.色温色调值:AVCaptureWhiteBalanceTemperatureAndTintValues
3.色度:AVCaptureWhiteBalanceChromaticityValues
对于第一个AVCaptureWhiteBalanceGains有一点需要特别注意,他是由blueGain、greenGain以及redGain三部分组成,且且且这三个的值范围在[1, maxWhiteBalanceGain]之间,如果超出范围会报一个异常
重点是怎么设置这些值
首先介绍下,白平衡的模式有三种:
1.AVCaptureWhiteBalanceModeLocked//锁定
2.AVCaptureWhiteBalanceModeAutoWhiteBalance//自动
3.AVCaptureWhiteBalanceModeContinuousAutoWhiteBalance//持续自动
只有在lock模式下才能设置白平衡的色温、色调、色度这些参数
官方对于白平衡提供了一些方法
设置增益值
- (void)setWhiteBalanceModeLockedWithDeviceWhiteBalanceGains:(AVCaptureWhiteBalanceGains)whiteBalanceGains completionHandler:(void (^)(CMTime syncTime))handler
通过增益值获取色度
-(AVCaptureWhiteBalanceChromaticityValues)chromaticityValuesForDeviceWhiteBalanceGains:(AVCaptureWhiteBalanceGains)whiteBalanceGains
通过色度获取增益值
- (AVCaptureWhiteBalanceGains)deviceWhiteBalanceGainsForChromaticityValues:(AVCaptureWhiteBalanceChromaticityValues)chromaticityValues
通过增益值获取色温色调
- (AVCaptureWhiteBalanceTemperatureAndTintValues)temperatureAndTintValuesForDeviceWhiteBalanceGains:(AVCaptureWhiteBalanceGains)whiteBalanceGains
通过色温色调获取增益值
- (AVCaptureWhiteBalanceGains)deviceWhiteBalanceGainsForTemperatureAndTintValues:(AVCaptureWhiteBalanceTemperatureAndTintValues)tempAndTintValues NS_AVAILABLE_IOS(8_0);
应用场景
有时候在自定义相机的时候需要手动调节白平衡的值一般UI是给定两个按钮和两个UISlider,一个按钮是自动,另一个是手动。一个slider是色温值,另一个是色调。用户点击调节白平衡的时候出现上述面板,同时给定当前白平衡的各个值。用户滑动slider时为设备设置对应的值。
我这边的做法是:
0.设置白平衡模式为AVCaptureWhiteBalanceModeLocked
1.用户滑动slider的时候获取到值,然后拿到template和tint
2.用这两个参数通过去构建AVCaptureWhiteBalanceTemperatureAndTintValues,得到色温色调值后,在通过调用temperatureAndTintValuesForDeviceWhiteBalanceGains去获取AVCaptureWhiteBalanceGains
3.获取到AVCaptureWhiteBalanceGains之后,去验证AVCaptureWhiteBalanceGains的有效性(redGain,blueGain,greenGain的范围都要在[1,maxWhiteBalanceGain]区间)
4.验证通过则通过调用setWhiteBalanceModeLockedWithDeviceWhiteBalanceGains设置增益
留个小尾巴
在初始化UI的时候UISlider那边需要给定一个最小值和最大值,我尝试用redGain=1,blueGain=1,greenGain=1和redGain=maxWhiteBalanceGain,blueGain=maxWhiteBalanceGain,greenGain=maxWhiteBalanceGain这两组临界值去获取最大最小template和tint结果返回的是同一个数值,如果您解决了这个问题,请留言,谢谢
网友评论