您的位置:首页 > 编程语言 > C语言/C++

颜色空间RGB与 色调、饱和度、亮度(ESL)转换的完整C语言算法

2014-12-25 18:29 1311 查看
2013-02-14 02:06匿名 | 分类:C/C++ | 浏览2402次
在WINDOWS颜色编辑的对话框里面右下方有两列,6个编辑框,分别显示色调(E)、饱和度(S)、亮度(L)和RGB颜色分量值。
注意到 E、S、L三者的取值范围都是0~240,R、G、B是0~255
急求ESL转RGB的C算法或数学计算方法。暂时不需要相关理论,只急着用!
满意再加10分
由ESL三个值得到RGB三值得C算法....................


分享到:



2013-02-14 04:48

天天爱答题,抽奖送惊喜~

提问者采纳

你把0-240 按比例 缩放 一下 到 HSL 的 范围,用 HSL-RGB 转换。

HSL--H是色相(0到360度),S是饱和度(0到1),L是亮度(0到1)

规1化的 HSL到RGB颜色值算换子程序:
// nomorized h,s,L 0-1.0
void HSL2RGB(double h, double s, double L,unsigned char *rr, unsigned char *gg,
unsigned char *bb)
{
double v,m,sv, vs0, c1, c2,xiaoshu,r,g,b;
int ih;
r = L; g = L;b = L;
if (L <= 0.5) v = L * (1.0 + s); else v = L + s - L * s;
if (v > 0) {
m = L + L - v; sv = (v - m ) / v;
h = h * 6.0; ih = (int)h;
xiaoshu = h - ih;
vs0 = v * sv * xiaoshu; c1 = m + vs0; c2 = v - vs0;
switch (ih) {
case 0: r = v; g = c1; b = m; break;
case 1: r = c2; g = v; b = m; break;
case 2: r = m;  g = v; b = c1; break;
case 3: r = m; g = c2; b = v; break;
case 4: r = c1; g = m; b = v; break;
case 5: r = v;  g = m; b = c2; break;
default: break;
}
}
*rr =  (int) (r * 0xff); *gg =  (int) (g * 0xff); *bb =  (int) (b * 0xff);
}

把你3个数值,各除以240,代入子程序即可。
详见:http://hi.baidu.com/svjvcfwticdkmse/item/e6c43a21e385b10977272c0e
彩虹光谱RGB值自动生成程序  (L_o_o_n_i_e == 金色潜鸟)


提问者评价
多谢!再加10分
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: