【发布时间】:2016-11-13 21:18:27
【问题描述】:
我正在将几个 Photoshop 元素映射到 CIFilter,我唯一遇到的问题是这个级别调整:
哪个 CI 过滤器(或过滤器组合)可以让我在第一个示例中使用上面的 16、1.73、239 和 39/245,或者在第二个示例中使用 31、1.25、255 30/255。我相信这是一种阴影/黑白电平调整。
任何帮助表示赞赏。
【问题讨论】:
标签: iphone ios photoshop core-image
我正在将几个 Photoshop 元素映射到 CIFilter,我唯一遇到的问题是这个级别调整:
哪个 CI 过滤器(或过滤器组合)可以让我在第一个示例中使用上面的 16、1.73、239 和 39/245,或者在第二个示例中使用 31、1.25、255 30/255。我相信这是一种阴影/黑白电平调整。
任何帮助表示赞赏。
【问题讨论】:
标签: iphone ios photoshop core-image
通过调整此页面中的公式:http://http.developer.nvidia.com/GPUGems/gpugems_ch22.html,我相信您可以使用 CIColorMatrix、CIGammaAdjust 和另一个 CIColorMatrix 的组合来做到这一点。
我们分别称输入电平为inBlack、inGamma 和inWhite,输出电平为outBlack 和outWhite。请注意,Photoshop 颜色介于 0 和 255 之间,而 CI 颜色介于 0 和 1 之间,因此您需要将 Photoshop 值(inGamma! 除外)除以 255,然后再将它们放入以下公式。
输入映射是pixel = (inPixel-inBlack)/(inWhite-inBlack),这意味着你的第一个矩阵将是
red = [1/(inWhite-inBlack) 0 0 0]
green = [0 1/(inWhite-inBlack) 0 0]
blue = [0 0 1/(inWhite-inBlack) 0]
alpha = [0 0 0 1]
bias = [-inBlack/(inWhite-inBlack), -inBlack/(inWhite-inBlack),-inBlack/(inWhite-inBlack), 0]
然后您使用CIGammaAdjust 和inGamma 数字应用伽马校正(我在进行计算时必须使用倒数1/inGamma,也试试吧!)。
最后输出映射为pixel = gammaCorrectedPixel * (outWhite - outBlack) + outBlack,给你最终的矩阵
red = [(outWhite - outBlack) 0 0 0]
green = [0 (outWhite - outBlack) 0 0]
blue = [0 0 (outWhite - outBlack) 0]
alpha = [0 0 0 1]
bias = [outBlack outBlack outBlack 0]
我实际上并没有使用 CoreImage 尝试过,但计算结果很好!
【讨论】:
outPixel = (pow(((inPixel * 255.0) - inBlack) / (inWhite - inBlack), inGamma) * (outWhite - outBlack) + outBlack) / 255.0,所以这是pow之外的部分(公式被解构为在pow之前应用的一个矩阵乘法,pow本身应用作为伽玛校正,然后是 pow 之后发生的所有事情的矩阵。