ColorTransform类调整显示对象的颜色值
ColorTransform
首先,我们要知道,一个颜色由四个通道组成:红、绿、蓝和alpha通道(这个alpha通道在PS里我不知道对应哪个),他们的十六进制颜色值分别为:
红:0xffff0000 绿:0xff00ff00 蓝:0xff0000ff (第一个0xff表示透明度100%)
在一张RGB模式的图片里,一个像素的颜色值是这个三个通道的减色模式叠加而成,比如上面这三个纯色叠加起来是白色,具体可以参考下面的附件...
通道示范swf:
然后我们再看一下官方的解释,就比较好理解了...
可使用ColorTransform 类调整显示对象的颜色值。可以将颜色调整或颜色转换应用于所有四种通道:红色、绿色、蓝色和 Alpha 透明度。 当ColorTransform 对象应用于显示对象时,将按如下方法为每个颜色通道计算新值:
新红色值 = (旧红色值 * redMultiplier) + redOffset
新绿色值 = (旧绿色值 * greenMultiplier) + greenOffset
新蓝色值 = (旧蓝色值 * blueMultiplier) + blueOffset
新 Alpha 值 = (旧 Alpha 值 * alphaMultiplier) + alphaOffset
如果计算后任何一个颜色通道值大于255,则该值将被设置为255。如果该值小于0,它将被设置为0。
ColorTransform () 构造函数
public function ColorTransform(
redMultiplier:Number = 1.0,
greenMultiplier:Number = 1.0,
blueMultiplier:Number = 1.0,
alphaMultiplier:Number = 1.0,
redOffset:Number = 0,
greenOffset:Number = 0,
blueOffset:Number = 0,
alphaOffset:Number = 0)
用指定的颜色通道值和 Alpha 值为显示对象创建 ColorTransform 对象。
参数
redMultiplier:Number (default = 1.0) — 红色乘数的值,在 0 到 1 范围内。
greenMultiplier:Number (default = 1.0) — 绿色乘数的值,在 0 到 1 范围内。
blueMultiplier:Number (default = 1.0) — 蓝色乘数的值,在 0 到 1 范围内。
alphaMultiplier:Number (default = 1.0) — Alpha 透明度乘数的值,在 0 到 1 范围内。
redOffset:Number (default = 0) — 红色通道值的偏移量,在 -255 到 255 范围内。
greenOffset:Number (default = 0) — 绿色通道值的偏移量,在 -255 到 255 范围内。
blueOffset:Number (default = 0) — 蓝色通道值的偏移量,在 -255 到 255 范围内。
alphaOffset:Number (default = 0) — Alpha 透明度通道值的偏移量,在 -255 到 255 范围内。
下面是一个Demo调调看就知道怎么用了:
今天在做一个地图应用时,要动态变化影片剪辑中的填充颜色,找来找去,发现在ColorTransform。
ColorTransform位于flash.geom中,使用 ColorTransform 类调整显示对象的颜色值。
总结一下:
ColorTransform类的构造函数:
ColorTransform(redmulti,greenmulti,bluemulti,alphamulti,redoffset,greenoffset,blueoffset,alphaoffset);
构造函数“ColorTransform()”中的所有参数都是Number类型,但实际上redmulti、greenmulti、bluemulti和alphamulti是0到1的小数。Redoffset、greenoffset、blueoffset、alphaoffset是从-255到255的整数。注意这里alphaoffset的取值范围是0到255,而AS3中DisplayObject.alpha属性的取值是0到1,两者不要混淆。
当将ColorTransform对象附加至显示对象时,RGB和Alpha四个通道都会分别进行计算和变换。最终颜色的计算方法为:
新红色值 = (旧红色值 * redMultiplier) + redOffset
新绿色值 = (旧绿色值 * greenMultiplier) + greenOffset
新蓝色值 = (旧蓝色值 * blueMultiplier) + blueOffset
新 Alpha 值 = (旧 Alpha 值 * alphaMultiplier) + alphaOffset
如果计算后任何一个颜色通道值大于 255,则该值将被设置为 255。 如果该值小于 0,它将被设置为 0。
有三种方式改变颜色值:
1
mc.alpha=.5;
2.
var color_trans:ColorTransform=new ColorTransform(); color_trans.redMultiplier=0; color_trans.greenMultiplier=0; color_trans.blueMultiplier=0; color_trans.alphaMultiplier=0; color_trans.redOffset=0; color_trans.greenOffset=0; color_trans.blueOffset=255; color_trans.alphaOffset=255; mc.transform.colorTransform=color_trans;
3.
mc.transform.colorTransform=new ColorTransform(1,1,1,1,0,0,0,0);//前四个参数为multi,后四个参数为offset,顺序RGBA
其中:
(1)使用直接设置alpha值的办法,使其半透明。
(2)采用强大的colorTransform对象,按照标准步骤对其进行操作。因为不能直接操作其内部colorTransform对象,代码先创建了一个自定义colorTransform对象color_trans,依次设置color_trans的各属性,并替换color_rect2的内部ColorTransform对象,改变color_rect2的颜色。
(3)直接使用colorTransform构造函数创建了一个无名colorTransform对象,并替换color_rect3的内部colorTransform对象。这种写法的优点在于代码简单直观,但是因为无名对象的属性和方法不能随意访问,在较复杂的场合,会增加代码的维护成本