[原创]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的相关章节再作进一步的深入。