Flash/Flex学习笔记(21):利用colorTransform改变对象的颜色及透明度

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);
05  
06 txtRedOffset.addEventListener(Event.CHANGE,ChangeHandler);
07 txtGreenOffset.addEventListener(Event.CHANGE,ChangeHandler);
08 txtBlueMultiplier.addEventListener(Event.CHANGE,ChangeHandler);
09 txtAlphaMultiplier.addEventListener(Event.CHANGE,ChangeHandler);
10  
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;
16  
17     var redOffSet:Number=txtRedOffset.value;
18     var greenOffSet:Number=txtGreenOffset.value;
19     var blueOffSet:Number=txtBlueOffset.value;
20     var alphaOffSet:Number=txtAlphaOffset.value;
21  
22     //trace("redMultiplier=" + redMultiplier);
23     //trace("greenMultiplier=" + greenMultiplier);
24     //trace("blueMultiplier=" + blueMultiplier);
25     //trace("alphaMultiplier=" + alphaMultiplier);
26  
27     var color:ColorTransform = new ColorTransform(redMultiplier,
28        greenMultiplier,
29        blueMultiplier,
30        alphaMultiplier,
31        redOffSet,
32        greenOffSet,
33        blueOffSet,
34        alphaOffSet);
35      
36     R.transform.colorTransform =
37     G.transform.colorTransform =
38     B.transform.colorTransform =
39     RGB.transform.colorTransform =
40     img.transform.colorTransform = color;
41 }
42 ChangeHandler(null);
43 stop();

从该示例中也可以看出,如果要消除一张图片颜色中的红色分量,只要将redMultiplier设置为0即可,不过红色分量消除后,其值变为0,即原来红色的部分会变成黑色,如果想把纯红换成纯绿,还要再把greenOffSet设置为255

作者:菩提树下的杨过
出处:http://yjmyzz.cnblogs.com 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

posted on 2010-11-17 16:52 aiaiwoo 阅读(449) 评论(0)  编辑  收藏 所属分类: AC3/FLEX


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

常用链接

留言簿

随笔分类

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜