话说ColorMatrixFilter

很欣慰的在 Flash 8 的ActionScript2.0语言参考中找到 GradientGlowFilter(渐变发光滤镜)和GradientBevelFilter(渐变斜角滤镜)时,我想我应该离镜效果中的“调整颜色”滤镜所代表的Class不远了。可是,我并没有找到我预想中的那个 “AdjustColorFilter” (或者类似的名字)Class,却发现了一个 “ColorMatrixFilter”

事实证明,这个ColorMaxtrixFilter确实就是我要找的,可是它让我失望。

在“调整颜色滤镜”中,将影片剪辑的颜色按照“亮度、对比度、饱和度和色相”进行调整,这个功能大大增强了Flash的处理能力。在Flash8 以前,我只能使用影片剪辑实例的“高级”颜色属性对影片剪辑进行变色处理。但是这样的处理有个最大的弊端--不能保证被调整对象的饱和度、对比度或者亮度不发生改变。这样的功能让人无法满意,不得以只能借助图像处理软件。而现在的“调整颜色滤镜”,终于可以让Photoshop歇歇了。

可惜的是,ColorMaxtrixFilter 却没有使用“调整颜色滤镜”的这种使用“亮度、对比度、饱和度、色相”来标明数值的方式,而是要使用矩阵!

ColorMatrixFilter 类使您可以将 4 x 5 矩阵转换应用于输入图像上的每个像素的 RGBA 颜色和 Alpha 值,以产生具有一组新的 RGBA 颜色和 Alpha值的结果。该类允许饱和度更改、色相旋转、亮度为 Alpha以及各种其它效果。可以将此滤镜应用于位图和 MovieClip 实例。

将使用下列公式,其中 a[0] 到 a[19] 对应于 20 个元素的数组属性矩阵中的条目 0 到 19。

1redResult = a[0] * srcR + a[1] * srcG + a[2] * srcB + a[3] * srcA + a[4]  
2greenResult = a[5] * srcR + a[6] * srcG + a[7] * srcB + a[8] * srcA + a[9]  
3blueResult = a[10] * srcR + a[11] * srcG + a[12] * srcB + a[13] * srcA + a[14]  
4alphaResult = a[15] * srcR + a[16] * srcG + a[17] * srcB + a[18] * srcA + a[19]

这有点匪夷所思。我不得不承认这种方式确实更加灵活和高效,但为什么不能简单一点?而现在,我得到一个色相为-80的“调整颜色滤镜”效果,该怎么做?

我只能来进行反推了。先在IDE环境中给一个影片剪辑实例“testMc”加上“调整颜色”滤镜,并将其值设置成我需要的,然后使用下面的代码:

testMC.filters[0].matrix;

反推的过程中,找到一点小小的规律( 这里有大大的规律 )。其实,亮度是最简单的,矩阵的其他值不变,只需要改动a[4]、a[9]、a[14]、a[19]即可,值的范围是-100到100,正好于滤镜中相同。而其他三个就麻烦些了。