gpt4 book ai didi

ios - 自定义核心图像滤镜颜色问题

转载 作者:搜寻专家 更新时间:2023-10-31 22:13:32 24 4
gpt4 key购买 nike

我正在学习如何编写自定义 Core Image 滤镜,但遇到这个问题,当颜色值在 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?

the output image

最佳答案

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

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

校正输出颜色。顺便说一下, channel 是 UInt8,所以值是整数,半红色值是 127。

关于ios - 自定义核心图像滤镜颜色问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38011420/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com