2013-07-26 79 views
1

我只是想知道如何获得一个颜色()对象或从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; 
} 
+0

您需要将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) –

+0

你应该添加你的解决方案作为答案,而不是编辑问题。 – 2013-07-26 20:27:55

回答

2

尝试乔希Whizzle的ColorMathUtil.as,它有你需要的一切,则s青梅。

+0

好,thx,但我已经发现它。不过,我会将此标记为答案。 – Ace

+2

链接似乎已过时 –