首页 > 代码库 > ActionScript3游戏中的图像编程(连载七十七)

ActionScript3游戏中的图像编程(连载七十七)

总目录:http://blog.csdn.net/iloveas2014/article/details/38304477

4.3.4 ColorMatrixFilter精粹的体现——跨通道运算


      用ColorMatrixFilter做ColorTransform的效果未免有点屈才了,没有把矩阵的精粹——资源重组及布阵策略体现出来。所以,我们还是把精力放在多通道的调度上吧。


      最最典型的一个例子就是灰度处理。还记得第1章的灰度专题吗?里面我提到了一个著名的心理学公式:


      Gray = r*0.299 + g*0.587 + b*0.114


      对于任何一种灰色,其RGB值都满足R=G=B=Gray(灰度值)这一等式,可见resultR,resultG和resultB都等于灰度Gray:


      resultR= srcR*0.299 + srcG*0.587 + srcB*0.114 + srcAlpha*0 + 0

      resultG= srcR*0.299 + srcG*0.587 + srcB*0.114 + srcAlpha*0 + 0

      resultB= srcR*0.299 + srcG*0.587 + srcB*0.114 + srcAlpha*0 + 0

 

      代入到矩阵公式中,得

     

     

 

      我们用这个矩阵测试一下效果(图 4.26):

 

 

图 4.26 灰度矩阵的效果


      通道被平均分配到了R,G和B中,达到了只保留明度的目的,这是ColorTransform所无法比拟的。


      在《ActionScript 3.0 图像处理基础教程》一书中,您可以找到给灰度图上色等更多好玩的变色矩阵,我就不再重复了。当然,ColorMatrixFilter的上色能力比较有限,所以我会在后续的章节介绍功能更为强大的HSB混合。


      下面,我们来探讨一下与Flash IDE调整颜色滤镜相配套的类——AdjustColor,看看这个神奇的类如何通过矩阵的乘法巧妙地将RGB转换为更符合人类感官系统的HSB模式。

 

 

 

ActionScript3游戏中的图像编程(连载七十七)