我将几个photoshop元素映射到CIFilter,唯一一个我遇到麻烦的是这个级别调整:
哪个CI过滤器(或过滤器组合)可以让我使用16,1.73,239&第一个例子中的39/245或第二个例子中的31,1.25,255 30/255。我相信这是一种暗影/黑白调节。
任何帮助表示感谢。
答案 0 :(得分:9)
通过调整此页面中的公式: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,但计算效果很好!