zoukankan      html  css  js  c++  java
  • 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颜色分量以及透明度,说得通俗点:可以把红车换成绿车,或者把黑脸变白脸.下面是示例代码:

    txtRedMultiplier.addEventListener(Event.CHANGE,ChangeHandler);
    txtGreenMultiplier.addEventListener(Event.CHANGE,ChangeHandler);
    txtBlueMultiplier.addEventListener(Event.CHANGE,ChangeHandler);
    txtAlphaMultiplier.addEventListener(Event.CHANGE,ChangeHandler);
    
    txtRedOffset.addEventListener(Event.CHANGE,ChangeHandler);
    txtGreenOffset.addEventListener(Event.CHANGE,ChangeHandler);
    txtBlueMultiplier.addEventListener(Event.CHANGE,ChangeHandler);
    txtAlphaMultiplier.addEventListener(Event.CHANGE,ChangeHandler);
    
    function ChangeHandler(e:Event) {
    	var redMultiplier:Number=txtRedMultiplier.value;
    	var greenMultiplier:Number=txtGreenMultiplier.value;
    	var blueMultiplier:Number=txtBlueMultiplier.value;
    	var alphaMultiplier:Number=txtAlphaMultiplier.value;
    
    	var redOffSet:Number=txtRedOffset.value;
    	var greenOffSet:Number=txtGreenOffset.value;
    	var blueOffSet:Number=txtBlueOffset.value;
    	var alphaOffSet:Number=txtAlphaOffset.value;
    
    	//trace("redMultiplier=" + redMultiplier);
    	//trace("greenMultiplier=" + greenMultiplier);
    	//trace("blueMultiplier=" + blueMultiplier);
    	//trace("alphaMultiplier=" + alphaMultiplier);
    
    	var color:ColorTransform = new ColorTransform(redMultiplier,
    	   greenMultiplier,
    	   blueMultiplier,
    	   alphaMultiplier,
    	   redOffSet,
    	   greenOffSet,
    	   blueOffSet,
    	   alphaOffSet);
    	
    	R.transform.colorTransform = 
    	G.transform.colorTransform = 
    	B.transform.colorTransform = 
    	RGB.transform.colorTransform = 
    	img.transform.colorTransform = color;
    }
    ChangeHandler(null);
    stop();
    

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

    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    memcpy源代码
    XML总结
    javabean总结
    VC++注射过程
    八排序算法
    fscanf功能具体解释
    外行观察者模式
    Android 实现用户列表信息的功能,然后选择删除幻灯片删除功能
    WINHTTP的API接口说明
    poj 1698 Alice's Chance 拆点最大流
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1703640.html
Copyright © 2011-2022 走看看