话说ColorMatrixFilter
- 2011-09-09更新:ColorMatrixFilter色彩矩阵滤镜
- 2011-01-24更新:smithfox提供了一个更详细的介绍,同时提供了自己实现的AdjustColorFilter。
- 2006-01-13更新:话说ColorMatrixFilter(2)
很欣慰的在 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,正好于滤镜中相同。而其他三个就麻烦些了。
- 文章ID:66
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/colormatrixfilter/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。