AS2中的颜色矩阵详细说明

By:不详 Date:2009-06-05

flash中提供的颜色矩阵可以让我们很容易的动态修改颜色的色相、透明度、饱和度、阴影等,正在慢慢研究中,这里留个地址先


一个翻译文章
在flash中可以用矩阵方便的操作颜色。在flash8以前的版本,操作颜色的唯一途径就是通过修改颜色对象中红,绿,蓝三个通道的值,在 Flash8,"颜色矩阵滤镜" ColorMatrixFilter (flash.filters.ColorMatrixFilter) 在颗粒等级上提供给你更好的控制方法。"颜色矩阵滤镜"为 4行5列的多维矩阵(20个元素的数组)。图 4 是 与"颜色矩阵滤镜"等同的矩阵。

Flash中的颜色矩阵
 

    R   G   B   A   Off
R   1   0   0   0   0
G   0   1   0   0   0
B   0   0   1   0   0
A   0   0   0   1   0

图4. 与"颜色矩阵滤镜"等同的矩阵

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

 

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都会被强制到该区间内。我来举些例子说明它的原理。

果你想在红色通道加100(偏移量),将a[4]设置为100,如(图5) 。

Flash中的颜色矩阵
 

    R   G   B   A   Off
R   1   0   0   0   100
G   0   1   0   0   0
B   0   0   1   0   0
A   0   0   0   1   0

图5. 红色值增加100

如果想使绿色通道加倍,将a[6]设为2,如(图6)

Flash中的颜色矩阵
 

    R   G   B   A   Off
R   1   0   0   0   0
G   0   2   0   0   0
B   0   0   1   0   0
A   0   0   0   1   0

图6. 绿色加倍

如果你要使结果图像中的蓝色与原图的红色数量相等,将a[10]设为1, a[12]设为0 ,如(图7)

Flash中的颜色矩阵
 

    R   G   B   A   Off
R   1   0   0   0   0
G   0   1   0   0   0
B   1   0   0   0   0
A   0   0   0   1   0

图7. 红色决定蓝色值

改变图像的亮度,你需要在每个颜色通道的值改变同样的数量。最简单的途径是在每个通道都设置相同的偏移量。偏移量为正时可以增加亮度为负时可以减小亮度。(图8) 是一个增加亮度的例子。

Flash中的颜色矩阵
 

    R   G   B   A   Off
R   1   0   0   0   50
G   0   1   0   0   50
B   0   0   1   0   50
A   0   0   0   1   0

图8. 增加亮度

你也可以通过将每个颜色通道与一个值相乘按比例的改变亮度,大于1的增加亮度小于1减小亮度。
按照原理,将图像转换为灰度图,你需要将每个通道的部分设为等值。因为有三个通道,你可以将每个通道乘以0.33并将它们相加得到结果值。如(图9)

Flash中的颜色矩阵
 

    R     G     B     A   Off
R   .33   .33   .33   0   0
G   .33   .33   .33   0   0
B   .33   .33   .33   0   0
A   0     0     0     1   0

图9.灰度图矩阵

由于不同颜色通道的相对屏幕发光度,但是 确实有特殊的提供更加真实的灰度图的"亮度系数"值 。例如在PS里创建一个纯绿色块然后把它放在一个纯蓝色块 ,然后将图像灰度化,你会看到原来绿色的地方的灰色会比原来蓝色的区域要亮。

在Flash里使用这些矩阵,创建一个"颜色矩阵滤镜"的实例然后将它加入到一个影片剪辑(MovieClip)实例上。下面是一个使绿色加倍的例子:

import flash.filters.ColorMatrixFilter;
var mat:Array = [ 1,0,0,0,0,
      0,2,0,0,0,
      0,0,1,0,0,
      0,0,0,1,0 ];
var colorMat:ColorMatrixFilter = new ColorMatrixFilter(mat);
clip.filters = [colorMat];


"颜色矩阵滤镜"与一个已知的矩阵使用,你可以完成除了亮度和灰度之外复杂的颜色调整。调整对比度,饱和度和色相在 Flash 8种都成为了肯能。虽然在这里讨论这些话题与这篇文章有些远,但是足以说 Flash 8提供了一个以前任何版本都不能做到的颜色操作途径。
 

参与讨论去: 艾睿(Airia) 交朋友去:友吧推荐文章去:网站贴吧
企业招聘

北京中视力天文化传媒有限公司

公司简介:北京中视力天文化传媒有限公司,是CCTV.com央视国际网络有限公司投资的互联网研发团队。我们是天使的使者。。。

招聘FlashAS程序员详情点击

Copyright 2007-2008 51AS.com Extended in kingcms 鲁ICP备06001158号