HSL変換RGBコード
2008 ワード
グラデーションに関する質問をすると、カラーグラデーションが数値的な大きさのグラデーションではないことに気づきます...
いろいろ検索してみると、HSV、HSL、RGB、CMYKなどいろいろなフォーマットが…
RGBはそんなグラデーションではありません...
wikiで公式を調べてみました
http://en.wikipedia.org/wiki/HSL_color_space
そしてコードに変わりました
これで自分の要求に合ったLightnessの移行ができます.
=.=
これだけ計算された関数を振り回して色の移行を行うと、性能はどこへも行かないに違いないと今考えています.alhpaを1から0に変更した黒いレイヤーを1つ作って直接変更するのではないでしょうか.
いろいろ検索してみると、HSV、HSL、RGB、CMYKなどいろいろなフォーマットが…
RGBはそんなグラデーションではありません...
wikiで公式を調べてみました
http://en.wikipedia.org/wiki/HSL_color_space
そしてコードに変わりました
//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つ作って直接変更するのではないでしょうか.