【问题标题】:Custom Core Image filter color issue自定义核心图像滤镜颜色问题
【发布时间】:2016-10-26 22:57:30
【问题描述】:

我正在学习如何编写自定义核心图像过滤器,但是当颜色值介于 0 到 1 之间时,呈现的颜色与内核代码中指定的颜色不同。(颜色在等于 0 或1.)

这是我的过滤代码:

import UIKit
class testFilter: CIFilter
{   
    // simply return half red color (0.5)

    var colorKernel = CIColorKernel(string:
        "kernel vec4 theFilter()" +
        "{ return vec4(0.5, 0.0, 0.0, 1.0); }"
    )

    override var outputImage: CIImage!
    { 
        let rect = CGRect(x: 0, y: 0, width: 200, height: 100)
        return colorKernel.applyWithExtent(rect,arguments: nil)
    }
}

用法:

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        // generate image
        let filter = testFilter()
        let ciImage = f.outputImage      
        let image = UIImage(CIImage: ciImage) 

        // add to view
        let v = UIImageView(frame: CGRect(x: 50, y: 50, width: 200, height: 100))
        v.image = image     
        view.addSubview(v)
    }
}

输出图像是这样的,实际的红色分量值在 190 左右(我用 Photoshop 检查了颜色值)。对于 0.5 的值,我认为正确的输出值是 255 * 0.5 = 122.5?

【问题讨论】:

    标签: ios swift core-image cifilter cikernel


    【解决方案1】:

    我认为这是因为内核正在创建基于 sRGB 曲线的颜色,而您期望基于线性值的颜色。您可以将过滤器的输出更改为:

    return colorKernel!.applyWithExtent(rect, arguments: nil)?
                       .imageByApplyingFilter("CISRGBToneCurveToLinear", withInputParameters: nil)
    

    校正输出颜色。顺便说一句,通道是UInt8,所以值是整数,半红的值为127。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-12
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-21
      相关资源
      最近更新 更多