惯用ColorMatrixFilter收集

常用ColorMatrixFilter收集

黑白
0.3086, 0.6094, 0.0820, 0, 0
0.3086, 0.6094, 0.0820, 0, 0
0.3086, 0.6094, 0.0820, 0, 0
0    , 0    , 0    , 1, 0

对比度(N取值为0到10)
N,0,0,0,128*(1-N)
0,N,0,0,128*(1-N)
0,0,N,0,128*(1-N)
0,0,0,1,0

亮度(N取值为-255到255) 注:一般取值为-100到100(这里是PS中的取值宽度)
1,0,0,0,N
0,1,0,0,N
0,0,1,0,N
0,0,0,1,0

颜色反相
-1, 0, 0, 0, 255
0 , -1, 0, 0, 255
0 , 0, -1, 0, 255
0 , 0, 0, 1,   0

阈值(N取值为-255到255)
0.3086*256,0.6094*256,0.0820*256,0,-256*N
0.3086*256,0.6094*256,0.0820*256,0,-256*N
0.3086*256,0.6094*256,0.0820*256,0,-256*N
0, 0, 0, 1, 0

色彩饱和度(N取值为0到255) 注:一般取值为0到100(这里是PS中的取值宽度)
0.3086*(1-N)+ N, 0.6094*(1-N)    , 0.0820*(1-N)    , 0, 0
0.3086*(1-N)   , 0.6094*(1-N) + N, 0.0820*(1-N)    , 0, 0
0.3086*(1-N)   , 0.6094*(1-N)    , 0.0820*(1-N) + N, 0, 0
0        , 0        , 0        , 1, 0

设置颜色通道(RGB均为0-2,A为0-1)
R,0,0,0,0
0,G,0,0,0
0,0,B,0,0
0,0,0,A,0

 

 

把bitmap格式的图片放在一个sprite中,然后设置sprite的filter。
1、变成黑白的。
spr.filters = [new ColorMatrixFilter(
             [1,0,0,0,0,   
                        1,0,0,0,0,   
                        1,0,0,0,0,   
                        0,0,0,1,0 
                       ])];
ColorMatrixFilter功能十分强大,他所在的包是:import flash.filters.ColorMatrixFilter;
2、变成高亮的。
spr.filters = [new ColorMatrixFilter(
             [1,0,0,0,50,   
                        0,1,0,0,50,   
                        0,0,1,0,50,   
                        0,0,0,1,0 
                       ])];
在flash中可以用矩阵方便的操作颜色。在flash8以前的版本,操作颜色的唯一途径就是通过修改颜色对象中红,绿,蓝三个通道的值,在Flash8,"颜色矩阵滤镜" ColorMatrixFilter (flash.filters.ColorMatrixFilter) 在颗粒等级上提供给你更好的控制方法。"颜色矩阵滤镜"为 4行5列的多维矩阵(20个元素的数组)。图 4 是 与"颜色矩阵滤镜"等同的矩阵。

红,绿,蓝通道的值由如下所示计算方法所决定:

CODE:

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]

可以看出,第一行的值决定了红色值,第二行决定绿色,第三行蓝色,第四行是透明(Alpha)通道值。同样可以看出首四栏值是与红,绿,蓝,alpha通道值的乘积,而第五栏的值分别是和(偏移量)。注意每行的源值和结果值都是在0到255的区间内。因此即使各个通道的值小于0或大于255都会被强制到该区间内。