[原创]ActionScript3游戏中的图像编程(连载六)

总目录:http://www.cnblogs.com/iloveas/p/3879125.html

 

1.1    ColorTransform对RGB数值的操作及应用

      flash.geom.ColorTransform是Flash内置的一个色彩变换类。它支持色彩通道值的线性变换。

      所谓线性变换,是指一次函数模式的变换:dst = src * multiplier + offset。您可以将每个通道的值与常量进行四则运算。对于ColorTransform类而言,通道的原数值和变换后的数值存在以下关系:

1 red(dst) = red(src) * redMultiplier + redOffset。 
2 green(dst) = green(src) * greenMultiplier + greenOffset 
3 blue(dst) = blue(src) * blueMultiplier + blueOffset
4 alpha(dst) = alpha(src) * alphaMultiplier + alphaOffset

      其中,dst代表结果值,src代表初始值。

      这个运算看起来并不复杂,我们也能手工实现。但是,自己写的算式无法直接应用于显示对象或者BitmapData上,您必须一个个像素点的去修改颜色(当然,ColorMatrixFilter,自定义滤镜,颜色表等方法也可以实现),并且对于矢量图而言,还不得不先转成位图。而用ColorTransform的话则非常方便,只要对指定对象应用了它,每个像素点的颜色就会自动作出相应的变化,从而实现图形色调,亮度等属性的整体变换乃至反色效果,而且不会丢失矢量信息。

      此外,ColorTransform还支持通过color属性将对象的所有像素点变成同一种颜色。假设,myColorTransform.color = 0xFFFF00,则被应用了myColorTransform的对象就会呈现出单一黄色的状态,它等价于以下代码:

1 myColorTransform.redMultiplier = myColorTransform.greenMultiplier = myColorTransform.blueMultipler = 0; 
2 myColorTransform.redOffset = 255; 
3 myColorTransform.greenOffset = 255; 
4 myColorTransform.blueOffset = 0;

      由于与src相乘的系数都设置成了0,所以,不管src是多少,dst的值都不会受到任何影响,red(dst)和green(dst)始终等于255,blue(dst)始终等于0,于是所有像素点的RGB色彩值都等于0xFFFF00(黄色),而alpha(不透明度)则不发生变化。

      ColorTransform最常用的地方有两处:

      1 DisplayObject.transform.colorTransform = myColorTransform;

      2 BitmapData.colorTransform(myColorTransform);

      在这里,我们只测试第一个,第二个在BitmapData的相关章节再作进一步的深入。

posted @ 2014-08-02 16:37  iloveas  阅读(752)  评论(4编辑  收藏  举报