Office中国论坛/Access中国论坛
标题:
【OneKeyTools源代码分享8】HSL转RGB
[打印本页]
作者:
只为设计
时间:
2016-8-30 13:58
标题:
【OneKeyTools源代码分享8】HSL转RGB
本帖最后由 只为设计 于 2016-8-30 14:06 编辑
private int Hsl2Rgb(int h, int s, int l)
{
float nh = (float)h / 255;
float ns = (float)s / 255;
float nl = (float)l / 255;
float nr = 0;
float ng = 0;
float nb = 0;
if (ns == 0)
{
nr = nl;
ng = nl;
nb = nl;
}
else
{
float q = 0;
if (nl < 0.5f)
{
q = nl * (1 + ns);
}
else
{
q = nl + ns - nl * ns;
}
float p = 2 * nl - q;
float tr = nh + (float)1 / 3;
float tg = nh;
float tb = nh - (float)1 / 3;
if (tr < 0)
{
tr = tr + 1;
}
else
{
if (tr > 1)
{
tr = tr - 1;
}
else
{
tr = tr + 0;
}
}
if (tg < 0)
{
tg = tg + 1;
}
else
{
if (tg > 1)
{
tg = tg - 1;
}
else
{
tg = tg + 0;
}
}
if (tb < 0)
{
tb = tb + 1;
}
else
{
if (tb > 1)
{
tb = tb - 1;
}
else
{
tb = tb + 0;
}
}
if (tr < (float)1 / 6)
{
nr = p + (q - p) * 6 * tr;
}
else
{
if (tr < (float)1 / 2)
{
nr = q;
}
else
{
if (tr < (float)2 / 3)
{
nr = p + (q - p) * 6 * ((float)2 / 3 - tr);
}
else
{
nr = p;
}
}
}
if (tg < (float)1 / 6)
{
ng = p + (q - p) * 6 * tg;
}
else
{
if (tg < (float)1 / 2)
{
ng = q;
}
else
{
if (tg < (float)2 / 3)
{
ng = p + (q - p) * 6 * ((float)2 / 3 - tg);
}
else
{
ng = p;
}
}
}
if (tb < (float)1 / 6)
{
nb = p + (q - p) * 6 * tb;
}
else
{
if (tb < (float)1 / 2)
{
nb = q;
}
else
{
if (tb < (float)2 / 3)
{
nb = p + (q - p) * 6 * ((float)2 / 3 - tb);
}
else
{
nb = p;
}
}
}
}
int r = (int)(nr * 255);
int g = (int)(ng * 255);
int b = (int)(nb * 255);
int rgb = r + g * 256 + b * 256 * 256;
return rgb;
}
复制代码
这是我根据维基百科上的公式做出的C#代码
该代码用于我开发的
OneKeyTools
插件里
使用时
int rgb = Hsl2Rgb(h, s, l);
int r = rgb % 256;
int g = (rgb / 256) % 256;
int b = (rgb / 256 / 256) % 256;
复制代码
上一篇:
【OneKeyTools源代码分享7】RGB转HSL
作者:
ui
时间:
2016-9-25 09:46
谢谢分享!
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3