总目录:http://blog.csdn.net/iloveas2014/article/details/38304477
4.3.1 ColorMatrixFilter与ColorTransform的功能比较
如果说ColorTransform是田忌的加减法,那么ColorMatrixFilter就是孙膑的乘法了。所以,ColorMatrixFilter与Matrix变换和士兵调度的行为一样,都充分调动了矩阵中各个元素之间的互动,使得色彩的变换方式更加灵活,策略也趋于多元化,从而实现出比ColorTransform更丰富的效果。
图 4.20是我在Flash IDE里制作的鲜橙味水果糖字体。
图 4.20 在Flash IDE里制作的鲜橙味水果糖字体
现在我想用变色的方法直接生成其它口味的糖果,我分别用ColorTransform和ColorMatrixFilter来实现,效果如图 4.21和图 4.22所示。
图 4.21 经ColorTransform处理过的彩虹糖字体
图 4.22 经ColorMatrixFilter处理过的彩虹糖字体
无论从色彩,光感,还是纹理等角度来看,ColorMatrixFilter调出来的版本都比ColorTransform要自然得多,不像ColorTransform的那么生硬(不过ColorTransform版本还挺有彩虹橡皮糖的感觉)。而且,ColorMatrixFilter几乎可以完美支持ColorTransform的所有变换(为什么说“几乎”,因为虽然原理一致,但处理方式存在着微妙的差异,稍候您将会看到),我们以redResult为例,考察它们俩的运算公式:
redResult = (a[0] * srcR) + (a[1] * srcG) + (a[2] * srcB) + (a[3] * srcA)+a[4]
redResult = redMultiplier * srcR + redOffset
对照便可得出,a[0]=redMultiplier,a[1]=a[2]=a[3]=0,a[4]=redOffset。
用同样的方法对照其它3个通道,可得出ColorTransform的变换矩阵:
根据矩阵乘法的运算法则,第1个矩阵第n列的数会和第2个矩阵第n行的数进行相乘,所以colorTransform中的Multiplier变量全部都位于矩阵的第n行第n列,即都在主对角线上,而offset变量则全部位于最后一行。
废话少说,我们把ColorTransform中用过的实例搬到这里来实践一下。