我只是想知道如何获得一个颜色()对象或从flash.' HSL值的十六进制颜色值(UINT)获取颜色从HSL值在Flash
的HSL背后的想法是,我可以将vaues从任何范围的任何对象映射到Hue(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
}
所以,如果我有这样的Funktion,我只是把它在一个for(i=0; i<360; i++)
循环,其中i
将色调营造彩虹的颜色光谱。
我已经做了一些map()
功能,能够轻松处理“streching”的色谱(这样是不完全360像素长条。
所以,球员,如果你有任何想法如何,我可以生成从HSL值的颜色在AS3,请告诉我。
解决方案Update
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;
}
您需要将hsl转换为rgb,然后将rgb打包为十六进制。使用谷歌搜索“as3 hsl to rgb”应该可以帮到你。也看看mr.doob的[color utils](https://code.google.com/p/mrdoob/source/browse/trunk/libs/net/hires/utils/ColorUtils.as) –
你应该添加你的解决方案作为答案,而不是编辑问题。 – 2013-07-26 20:27:55