HSL変換RGBコード


グラデーションに関する質問をすると、カラーグラデーションが数値的な大きさのグラデーションではないことに気づきます...
いろいろ検索してみると、HSV、HSL、RGB、CMYKなどいろいろなフォーマットが…
RGBはそんなグラデーションではありません...
wikiで公式を調べてみました
http://en.wikipedia.org/wiki/HSL_color_space
HSL转RGB代码_第1张图片
そしてコードに変わりました

		//Convert HSL to RGB
		//H: Hue ( 0 to 360 ) 
		//S: Saturation ( 0 to 1 )
		//L: Ligntness ( 0 to 1 )
		private function HSL_TO_RGB(H:Number,S:Number,L:Number):Number
		{
			var C:Number;
			if(L <= 0.5) C = 2 * L * S;
			else C = (2 - 2 * L) * S;
			var H2:Number = Math.floor(H/60);
			var X:Number = C * ( 1 - Math.abs(H2 % 2 - 1) );
			var R:Number;
			var G:Number;
			var B:Number;
			switch(H2)
			{
				case 0:
				R = C;
				G = X;
				B = 0;
				break;
				case 1:
				R = X;
				G = C;
				B = 0;				
				break;
				case 2:
				R = 0;
				G = C;
				B = X;				
				break;
				case 3:
				R = 0;
				G = X;
				B = C;
				break;
				case 4:
				R = X;
				G = 0;
				B = C;
				break;
				case 5:
				R = C;
				G = 0;
				B = X;
				break;
				default:
				R = G = B = 0;
				break;
			}
			var m:Number = L - 0.5 * C;
			R += m;
			G += m;
			B += m;
			R = Math.floor( R * 255);
			G = Math.floor( G * 255);
			B = Math.floor( B * 255);
			return R * 65536 + G * 256 + B;
		}

これで自分の要求に合ったLightnessの移行ができます.
=.=
これだけ計算された関数を振り回して色の移行を行うと、性能はどこへも行かないに違いないと今考えています.alhpaを1から0に変更した黒いレイヤーを1つ作って直接変更するのではないでしょうか.