Flash小品之颜色解析

时间:2022-06-05
本文章向大家介绍Flash小品之颜色解析,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

    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 constructor
		public function ARGBColor(value:uint=0)
		{
			SetColor(value);
		}
		
		//! set color value
		public function SetColor(value:uint):void
		{
		    splitColor(value);
		}
		
		//! set color value
		public function SetColorARGB(a:uint, r:uint, g:uint, b:uint):void
		{
			SetA(a);
			SetR(r);
			SetG(g);
			SetB(b);
		}
		
		//! get color value
		public function GetColor():uint
		{
			return mergeColor();
		}
		
		//! set alpha value
		public function SetA(a_:uint):void
		{
		    a = a_;
			a = clamp(a, 0, 0xFF);
		}
		
		//! get alpha value
		public function GetA():uint
		{
			return a;
		}
		
		//! set red value
		public function SetR(r_:uint):void
		{
			r = r_;
			r = clamp(r, 0, 0xFF);
		}
		
		//! get red value
		public function GetR():uint
		{
			return r;
		}
		
		//! set green value
		public function SetG(g_:uint):void
		{
			g = g_;
			g = clamp(g, 0, 0xFF);
		}
		
		//! get green value
		public function GetG():uint
		{
			return g;
		}
		
		//! set blue value
		public function SetB(b_:uint):void
		{
			b = b_;
			b = clamp(b, 0, 0xFF);
		}
		
		//! get blue value
		public function GetB():uint
		{
			return b;
		}
		
		// split color
		private function splitColor(value:uint):void
		{
		    a = ((value >> 24) & 0xFF); // seems in Flash '>>' is signed shfiting
			r = ((value >> 16) & 0xFF);
			g = ((value >> 8) & 0xFF);
			b = (value & 0xFF);
		}
		
		// merge color
		private function mergeColor():uint
		{
			return (a << 24) | (r << 16) | (g << 8) | b;
		}
		
		// clamp helper function
		private function clamp(val:Number, min:Number, max:Number):Number
		{
            return Math.max(min, Math.min(max, val));
        }
		
	}
	
}