挺好的资料,可是原文找不到了。所以就没有了图。。不过有这些资料也很有用。
matrix是一个长度为4*5=20的数组,其构成如下所示:
R ,G, B, A, offset
[1, 0, 0, 0, 0]); // red
[0, 1, 0, 0, 0]); // green
[0, 0, 1, 0, 0]); // blue
[0, 0, 0, 1, 0]); // alpha
上面是matrix的初始状态。
下面我分先来分析一下其初始状态。
red通道的值:(1,0,0,0,0)表示,R通道的乘数是1(完全保留),别的道道的的乘数是0,(不加入别的通道的颜色),色彩偏移量off是0;
别的通道依次类推。
下面来做一些效果,增加对colorMatrixFilter的认识:
亮度(N取值为-255到255)
1,0,0,0,N
0,1,0,0,N
0,0,1,0,N
0,0,0,1,0
我们只需要设置一下RGB的色彩偏移就能调节其亮度,是不是很简单呢。
-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就行了。
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;
按理说应该把RGB平分,都是0.3333333。三个数字应该是根据色彩光波频率及色彩心理学计算出来的(本人是这么认为,当然也查询了一些资料,目前尚未找到准确答案。
在作用于人眼的光线中,彩色光要明显强于无色光。对一个图像按RGB平分理论给图像去色的话,人眼就会明显感觉到图像变暗了(当然可能有心理上的原因,也有光波的科学依据)另外,在彩色图像中能识别的一下细节也可能会丢失。我假想:可能绿色的一些东西会丢失。
下面是我从PS中对RGB都为255的明度对比图:
所谓色彩旋转就是让某一个通道的色彩信息让另一个通道去显示;比如,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
1,0,0,0,0
0,0,0,0,0
0,0,0,0,0
0,0,0,1,0
上面是只显示红色通道。依次类推。