zoukankan      html  css  js  c++  java
  • [原创]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的相关章节再作进一步的深入。

  • 相关阅读:
    Map集合
    Collections 工具类
    LinkedList 集合
    List集合
    Iterator迭代器
    Collection集合
    时间日期类
    一看就懂!速写docker 容器数据库备份脚本
    Nginx 配置之HTTPS和WSS那些你不知道的事!
    https 证书认证/颁发/秒级认证无烦恼
  • 原文地址:https://www.cnblogs.com/iloveas/p/3887150.html
Copyright © 2011-2022 走看看