使用filters中的ColorMatrixFilter

flex4sdk中可以使用flash.filters.ColorMatrixFilter和spark.filters.ColorMatrixFilter,两者实现或许有区别,但基本用法区别不大。

先看一下api中的说明:
[quote]使用 ColorMatrixFilter 类可以将 4 x 5 矩阵转换应用于输入图像上的每个像素的 RGBA 颜色和 Alpha 值,以生成具有一组新的 RGBA 颜色和 Alpha 值的结果。该类允许饱和度更改、色相旋转、亮度为 Alpha 以及各种其他效果。您可以将滤镜应用于任何显示对象(即,从 DisplayObject 类继承的对象)[/quote]

对于颜色矩阵matrix:

[quote]滤镜将每个源像素分离成它的红色、绿色、蓝色和 Alpha 成分,分别以 srcR、srcG、srcB 和 srcA 表示。要计算四个通道中每个通道的结果,可将图像中每个像素的值乘以转换矩阵中的值。(可选)可以将偏移量(介于 -255 至 255 之间)添加到每个结果(矩阵的每行中的第五项)中。滤镜将各颜色成分重新组合为单一像素,并写出结果。在下列公式中,a[0] 到 a[19] 对应于由 20 个项目组成的数组中的条目 0 至 19,该数组已传递到 matrix 属性:[/quote]
redResult = (a[0] * srcR) + (a[1] * srcG) + (a[2] * srcB) + (a[3] * srcA) + a[4]
greenResult = (a[5] * srcR) + (a[6] * srcG) + (a[7] * srcB) + (a[8] * srcA) + a[9]
blueResult = (a[10] * srcR) + (a[11] * srcG) + (a[12] * srcB) + (a[13] * srcA) + a[14]
alphaResult = (a[15] * srcR) + (a[16] * srcG) + (a[17] * srcB) + (a[18] * srcA) + a[19]

[color=red]需要注意的是:matrix这个属性不能直接修改其数据。[/color]

[color=red]错误的写法:[/color]
filter.matrix[0] = 1

[color=red]正确的写法:[/color]
m = filter.matrix;
m[0] = 1;
filter.matrix = m;


附件里是个小例子

你可能感兴趣的:(Flex示例)