总目录:http://blog.csdn.net/iloveas2014/article/details/38304477
4.3.4 ColorMatrixFilter精粹的体现——跨通道运算
用ColorMatrixFilter做ColorTransform的效果未免有点屈才了,没有把矩阵的精粹——资源重组及布阵策略体现出来。所以,我们还是把精力放在多通道的调度上吧。
最最典型的一个例子就是灰度处理。还记得第1章的灰度专题吗?里面我提到了一个著名的心理学公式:
Gray = r*0.299 + g*0.587 + b*0.114
对于任何一种灰色,其RGB值都满足R=G=B=Gray(灰度值)这一等式,可见resultR,resultG和resultB都等于灰度Gray:
resultR= srcR*0.299 + srcG*0.587 + srcB*0.114 + srcAlpha*0 + 0
resultG= srcR*0.299 + srcG*0.587 + srcB*0.114 + srcAlpha*0 + 0
resultB= srcR*0.299 + srcG*0.587 + srcB*0.114 + srcAlpha*0 + 0
代入到矩阵公式中,得
我们用这个矩阵测试一下效果(图 4.26):
图 4.26 灰度矩阵的效果
通道被平均分配到了R,G和B中,达到了只保留明度的目的,这是ColorTransform所无法比拟的。
在《ActionScript 3.0 图像处理基础教程》一书中,您可以找到给灰度图上色等更多好玩的变色矩阵,我就不再重复了。当然,ColorMatrixFilter的上色能力比较有限,所以我会在后续的章节介绍功能更为强大的HSB混合。
下面,我们来探讨一下与Flash IDE调整颜色滤镜相配套的类——AdjustColor,看看这个神奇的类如何通过矩阵的乘法巧妙地将RGB转换为更符合人类感官系统的HSB模式。