我将几个 Photoshop 元素映射到 CIFilter,我唯一遇到的问题是这个级别调整:
哪个 CI 过滤器(或过滤器组合)可以让我在第一个示例中使用上面的 16、1.73、239 和 39/245,或者在第二个示例中使用 31、1.25、255 30/255。我相信这是一种阴影/黑白电平调整。
任何帮助表示赞赏。
我将几个 Photoshop 元素映射到 CIFilter,我唯一遇到的问题是这个级别调整:
哪个 CI 过滤器(或过滤器组合)可以让我在第一个示例中使用上面的 16、1.73、239 和 39/245,或者在第二个示例中使用 31、1.25、255 30/255。我相信这是一种阴影/黑白电平调整。
任何帮助表示赞赏。
通过调整此页面中的公式:http: //http.developer.nvidia.com/GPUGems/gpugems_ch22.html,我相信您可以使用和的组合CIColorMatrix
来做到这一点。CIGammaAdjust
CIColorMatrix
让我们分别称输入电平和inBlack
,以及输出电平和。请注意,Photoshop 颜色介于 0 和 255 之间,而 CI 颜色介于 0 和 1 之间,因此您需要将 Photoshop 值(除了!)除以 255,然后再将它们放入以下公式。inGamma
inWhite
outBlack
outWhite
inGamma
输入映射是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 尝试过,但计算结果很好!