7

我将几个 Photoshop 元素映射到 CIFilter,我唯一遇到的问题是这个级别调整:

当前版本的 Photoshop 的屏幕截图

哪个 CI 过滤器(或过滤器组合)可以让我在第一个示例中使用上面的 16、1.73、239 和 39/245,或者在第二个示例中使用 31、1.25、255 30/255。我相信这是一种阴影/黑白电平调整。

任何帮助表示赞赏。

4

1 回答 1

10

通过调整此页面中的公式:http: //http.developer.nvidia.com/GPUGems/gpugems_ch22.html,我相信您可以使用和的组合CIColorMatrix来做到这一点。CIGammaAdjustCIColorMatrix

让我们分别称输入电平和inBlack,以及输出电平和。请注意,Photoshop 颜色介于 0 和 255 之间,而 CI 颜色介于 0 和 1 之间,因此您需要将 Photoshop 值(除了!)除以 255,然后再将它们放入以下公式。inGammainWhiteoutBlackoutWhiteinGamma

输入映射是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]

然后你使用CIGammaAdjustinGamma数字应用伽马校正(我在计算时必须使用倒数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 尝试过,但计算结果很好!

于 2012-12-14T03:38:47.713 回答