大家都知道ColorMatrixFilter用矩阵可以实现很多图像效果, 但是矩阵实在是太难理解了. 长久以来我们都是习惯于用photoshop和firework来做图像的处理, 我们所接触到的是 "亮度,对比度,饱和度和色相". 所以很多的同学想了方法: 用我们更容易理解的亮度,对比度,饱和度和色相来定义ColorMatrixFilter中的matrix.
整理有三种工具:
方法一: Adobe官方demo.
方法二: 由 gskinner 提供, demo和类下载 , demo如下, 这个可以直接用其中的AS3 utility类:
方法三: 由 L4LCD blog中的文章: 转换亮度/对比度/饱和度/色相到ColorMatrixFilter , 这个作者说是用Flash fl包里的AdjustColor函数.
转载自 http://blog.163.com/mdzhg@126/blog/static/1633215682010423113048711/
0、 ColorMatrixFilter默认值
1,0,0,0,0
0,1,0,0,0
0,0,1,0,0
0,0,0,1,0
1、调整亮度:
亮度(N 取值为-255到255)
1,0,0,0, N
0,1,0,0,N
0,0,1,0,N
0,0,0,1,0
我们只需要设置一下RGB的色彩偏移就能调节其亮度 ,是不是很简单呢。
2、颜色反向
-1 ,0,0,0,255
0, -1 ,0,0,255
0,0,-1 ,0,255
0,0,0,1,0
先解释一下颜色反向:就是把0变为255,255变为0,1变为254,254变为1.....
因此,我们只需把RGB通道的原通道乘数设为-1,然后再把色彩偏移量设为255就行了 。
3、图像去色:
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
1)、去色原理:只要把RGB三通道的色彩信息设置成一样;即:R=G=B,那么图像就变成了灰色,并且,为了保证图像亮度不变,同一个通道中的R+G+B=1: 如:0.3086+0.6094+0.0820=1;
2)、三个数字的由来:0.3086, 0.6094, 0.0820 ;
5、对比度
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
分析:
所谓对比度就是让红的更红,绿的更绿……或反之。初一想,我们只需要修改RGB的乘 数(要一至,不然偏色)。可仔细一琢磨,不对。如果只增加乘数,那么整个图像就会被漂白,(或反之)。好,有办法了,设置色彩偏移量,offset。具体 要偏移多少呢,我们找到了一个折中的方案:128(1-N);即:一幅图像,不论很亮或很黑,但对比度为0了,最终得到的都是一幅中性灰度的图像 (128),
6、阈值
所谓阈值,就是以一个色度值为基准对图像作非黑即白的处理(注意没有灰色),由于不去除了彩色属性,因此,也离不开0.3086, 0.6094, 0.0820这三组神奇的数字。
(N取值为0到255)
下面的256也可以改成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
分析:
先不看最后面的色彩偏移:-256*N
前面我们提及过,当RGB三个通道的色彩信息一模一样时,图像就失去了色彩(去色),从 0.3086*256,0.6094*256,0.0820*256,0,-256*N可以看出:图像已经去色了,并且,(*256)亮度已经翻了256 倍(当然也可以是255);我们知道,RGB的有效值是0-255,即:0,1,2……255,把这些值乘以255以后会出现什么情况呢?但是除了0之 外,别的全都大于或等于255了,所以此时的图像除了剩有几个黑点外,其它的全都变成白色了如图一(N=0);那么现在我们再作色彩偏移处理:把RGB都 减去255;上次值为255(白色)的现在又变成0(黑色了)超过255的仍然是白色,我们不断的反复减255,图2,图3,图4,图5,分别是 N=64,N=128,n=192,n=255时的图像:
7、色彩旋转
所谓色彩旋转就是让某一个通道的色彩信息让另一个通道去显示;比如,R显示G的信息,G显示B的信息,B显示R的信息,也可以只拿出一部份信息让给 别的通道去显示,至于参数的瓜分可以平分。不必太讲究,但是,始终要坚持的一个原则就是每一个通道中的RGB信息量之和一定要为1,不然将会生偏色,如果 您要制作偏色效果又另当别论;请偿试下面的参数:
0,1,0,0,0
0,0,1,0,0
1,0,0,0,0
0,0,0,1,0
//---------------
0,0,1,0,0
1,0,0,0,0
0,1,0,0,0
0,0,0,1,0
8、只显示某个通道 ;
1 ,0,0,0,0
0,0,0,0,0
0,0,0,0,0
0,0,0,1,0
//上面是只显示红色通道。依次类推。