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的相关章节再作进一步的深入。

  • 相关阅读:
    测试文件报告
    Bug Variations
    阶段一 问答题2
    阶段一 问答题1
    HeapSort
    Git系列 (01):git clone 速度太慢解决方法
    ES6系列 (03):链判断运算符和Null 判断运算符
    ES6系列 (02):解构赋值
    ES6系列 (01):箭头函数this指向问题
    我忘却了所有,抛却了信仰,舍弃了轮回,只为,那曾在佛前哭泣的玫瑰,早已失去旧日的光泽。
  • 原文地址:https://www.cnblogs.com/iloveas/p/3887150.html
Copyright © 2011-2022 走看看