我只想知道如何从 Flash 中的 HSL 值中获取 Color() 对象或十六进制颜色值 (uint)。´
HSL 背后的想法是,我可以将任何范围内的值映射到色调 (0 - 360) 的范围并获得相应的颜色。
此外,我想控制与“亮度”或“亮度”值分开的色调值。饱和度始终为 100%。
我的代码的“基础”如下所示:
function getHSL( var Hue, var Saturation, var Lightness ) {
// Hue = 0 - 360, Satturation = 0 - 100, Lightness = 0 - 100
// DO THE MAGIC
return color // as3 Color() object
}
所以如果我有这个功能,我可以在一个for( i=0; i<360; i++)
循环中调用它,在这个循环中i
,色调将创建一个彩虹色谱。
我已经完成了一些map()
功能来轻松处理“拉伸”色谱(例如不完全是 360 像素长的条。
因此,如果您知道如何从 as3 中的 HSL 值生成颜色,请告诉我。
解决方案更新
function getColorFromHSL( h:Number, s:Number, v:Number ):Array {
var r:Number = 0;
var g:Number = 0;
var b:Number = 0;
var rgb:Array = [];
var tempS:Number = s / 100;
var tempV:Number = v / 100;
var hi:int = Math.floor(h/60) % 6;
var f:Number = h/60 - Math.floor(h/60);
var p:Number = (tempV * (1 - tempS));
var q:Number = (tempV * (1 - f * tempS));
var t:Number = (tempV * (1 - (1 - f) * tempS));
switch(hi)
{
case 0: r = tempV; g = t; b = p; break;
case 1: r = q; g = tempV; b = p; break;
case 2: r = p; g = tempV; b = t; break;
case 3: r = p; g = q; b = tempV; break;
case 4: r = t; g = p; b = tempV; break;
case 5: r = tempV; g = p; b = q; break;
}
rgb = [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
return rgb;
}