matlab编程RGB与HSL颜色转化,RGB和HSL等色系之间的转换C语言算法

如下代码在DOS下编译通过,是很久以前写的,现在共享出来希望能对大家带来方便,在VC下编译可以会出现warnings。

#include

#define MAX(a, b) (a > b ? a : b)

#define MIN(a, b) (a < b ? a : b)

/* hsv_to_rgb:

*  Converts from HSV colorspace to RGB values.

*/

void hsv_to_rgb(float h, float s, float v, int *r, int *g, int *b)

{

float f, x, y, z;

int i;

v *= 255.0;

if (s == 0.0) {

*r = *g = *b = (int)v;

}

else {

while (h < 0)

h += 360;

h = fmod(h, 360) / 60.0;

i = (int)h;

f = h - i;

x = v * (1.0 - s);

y = v * (1.0 - (s * f));

z = v * (1.0 - (s * (1.0 - f)));

switch (i) {

case 0: *r = v; *g = z; *b = x; break;

case 1: *r = y; *g = v; *b = x; break;

case 2: *r = x; *g = v; *b = z; break;

case 3: *r = x; *g = y; *b = v; break;

case 4: *r = z; *g = x; *b = v; break;

case 5: *r = v; *g = x; *b = y; break;

}

}

}

/* rgb_to_hsv:

*  Converts an RGB value into the HSV colorspace.

*/

void rgb_to_hsv(int r, int g, int b, float *h, float *s, float *v)

{

float min, max, delta, rc, gc, bc;

rc = (float)r / 255.0;

gc = (float)g / 255.0;

bc = (float)b / 255.0;

max = MAX(rc, MAX(gc, bc));

min = MIN(rc, MIN(gc, bc));

delta = max - min;

*v = max;

if (max != 0.0)

*s = delta / max;

else

*s = 0.0;

if (*s == 0.0) {

*h = 0.0;

}

else {

if (rc == max)

*h = (gc - bc) / delta;

else if (gc == max)

*h = 2 + (bc - rc) / delta;

else if (bc == max)

*h = 4 + (rc - gc) / delta;

*h *= 60.0;

if (*h < 0)

*h += 360.0;

}

}

(佚名)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值