美文网首页
关于ios 自定义相机的白平衡调节

关于ios 自定义相机的白平衡调节

作者: 秋燕归 | 来源:发表于2019-04-22 08:11 被阅读0次

    对于相机的设置一般都是操作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结果返回的是同一个数值,如果您解决了这个问题,请留言,谢谢

    相关文章

      网友评论

          本文标题:关于ios 自定义相机的白平衡调节

          本文链接:https://www.haomeiwen.com/subject/ledegqtx.html