Flash小品之颜色解析

来源:互联网 发布:中级网络安全工程师 编辑:程序博客网 时间:2024/04/20 04:34

    Flash小品之颜色解析    
  
  不知不觉已经用了一阵子的AS3,渐渐的对Flash有了不少好感,从一个游戏爱好者的角度出发,我个人更喜欢将Flash看做是一套完备的2D游戏制作引擎,平日兴致所致之时,自己便用它来随便搞些东西,开发效率上确实提高了不少,很多开发上的细节Flash基本都已经提供实现,再加上其完善的编辑功能,我个人非常推崇将其用于原型游戏的开发,有兴趣的朋友不妨一试 :)   
   
  近来有机会处理到了Bitmap相关的内容,尤其是颜色部分的处理,感觉Flash提供的方法,譬如BitmapData.getPixel,BitmapChannel等等,都不是特别方便直观,尤其是在需要处理各个颜色分量的情况下。鉴于Flash内置的颜色模式遵循‘a r g b’的排列方式,自己又暂时找不到特别好的处理方法(有识之士请告知一下 :)),于是自己又重造了一次车轮,在此为记,有兴趣的朋友可以看一看:


/*!     \file ARGBColor.as    \brief this is simple color class for color converting*/package  {public class ARGBColor{// color value        private var a:uint;private var r:uint;private var g:uint;private var b:uint;// default constructorpublic function ARGBColor(value:uint=0){SetColor(value);}//! set color valuepublic function SetColor(value:uint):void{    splitColor(value);}//! set color valuepublic function SetColorARGB(a:uint, r:uint, g:uint, b:uint):void{SetA(a);SetR(r);SetG(g);SetB(b);}//! get color valuepublic function GetColor():uint{return mergeColor();}//! set alpha valuepublic function SetA(a_:uint):void{    a = a_;a = clamp(a, 0, 0xFF);}//! get alpha valuepublic function GetA():uint{return a;}//! set red valuepublic function SetR(r_:uint):void{r = r_;r = clamp(r, 0, 0xFF);}//! get red valuepublic function GetR():uint{return r;}//! set green valuepublic function SetG(g_:uint):void{g = g_;g = clamp(g, 0, 0xFF);}//! get green valuepublic function GetG():uint{return g;}//! set blue valuepublic function SetB(b_:uint):void{b = b_;b = clamp(b, 0, 0xFF);}//! get blue valuepublic function GetB():uint{return b;}// split colorprivate function splitColor(value:uint):void{    a = ((value >> 24) & 0xFF); // seems in Flash '>>' is signed shfitingr = ((value >> 16) & 0xFF);g = ((value >> 8) & 0xFF);b = (value & 0xFF);}// merge colorprivate function mergeColor():uint{return (a << 24) | (r << 16) | (g << 8) | b;}// clamp helper functionprivate function clamp(val:Number, min:Number, max:Number):Number{            return Math.max(min, Math.min(max, val));        }}}