transform是flash.Display.DisplayObject的属性之一,而colorTransform又是transform的属性,这也就意味着几乎所有对象都可以使用colorTransform属性
这是官方的解释:
当 ColorTransform 对象应用于显示对象时,将按如下方法为每个颜色通道计算新值:
新红色值 = (旧红色值 * redMultiplier) + redOffset
新绿色值 = (旧绿色值 * greenMultiplier) + greenOffset
新蓝色值 = (旧蓝色值 * blueMultiplier) + blueOffset
新 Alpha 值 = (旧 Alpha 值 * alphaMultiplier) + alphaOffset (注:本人测试下来,好象这一行公式没啥作用)
如果计算后任何一个颜色通道值大于 255,则该值将被设置为 255。 如果该值小于 0,它将被设置为 0。
用这个东西可以改变几乎任何对象的R,G,B颜色分量以及透明度,说得通俗点:可以把红车换成绿车,或者把黑脸变白脸.下面是示例代码:
01 |
txtRedMultiplier.addEventListener(Event.CHANGE,ChangeHandler); |
02 |
txtGreenMultiplier.addEventListener(Event.CHANGE,ChangeHandler); |
03 |
txtBlueMultiplier.addEventListener(Event.CHANGE,ChangeHandler); |
04 |
txtAlphaMultiplier.addEventListener(Event.CHANGE,ChangeHandler); |
06 |
txtRedOffset.addEventListener(Event.CHANGE,ChangeHandler); |
07 |
txtGreenOffset.addEventListener(Event.CHANGE,ChangeHandler); |
08 |
txtBlueMultiplier.addEventListener(Event.CHANGE,ChangeHandler); |
09 |
txtAlphaMultiplier.addEventListener(Event.CHANGE,ChangeHandler); |
11 |
function ChangeHandler(e:Event) { |
12 |
var redMultiplier: Number =txtRedMultiplier.value; |
13 |
var greenMultiplier: Number =txtGreenMultiplier.value; |
14 |
var blueMultiplier: Number =txtBlueMultiplier.value; |
15 |
var alphaMultiplier: Number =txtAlphaMultiplier.value; |
17 |
var redOffSet: Number =txtRedOffset.value; |
18 |
var greenOffSet: Number =txtGreenOffset.value; |
19 |
var blueOffSet: Number =txtBlueOffset.value; |
20 |
var alphaOffSet: Number =txtAlphaOffset.value; |
22 |
//trace("redMultiplier=" + redMultiplier); |
23 |
//trace("greenMultiplier=" + greenMultiplier); |
24 |
//trace("blueMultiplier=" + blueMultiplier); |
25 |
//trace("alphaMultiplier=" + alphaMultiplier); |
27 |
var color:ColorTransform = new ColorTransform(redMultiplier, |
36 |
R.transform.colorTransform = |
37 |
G.transform.colorTransform = |
38 |
B.transform.colorTransform = |
39 |
RGB.transform.colorTransform = |
40 |
img.transform.colorTransform = color; |
从该示例中也可以看出,如果要消除一张图片颜色中的红色分量,只要将redMultiplier设置为0即可,不过红色分量消除后,其值变为0,即原来红色的部分会变成黑色,如果想把纯红换成纯绿,还要再把greenOffSet设置为255