RGB转HSL怎么计算 C语言代码
时间: 2024-05-10 12:17:19 浏览: 150
RGB转H.264的C语言代码
RGB转HSL的计算公式如下:
- 首先,将 RGB 的 R、G、B 值分别除以255,得到它们的值在 0~1 范围内;
- 找出这三个值中的最大值和最小值,计算它们的差值(即色域);
- 计算亮度(L):(最大值 + 最小值) / 2;
- 计算饱和度(S):如果 L < 0.5,则 S = 色域 / (最大值 + 最小值);如果 L >= 0.5,则 S = 色域 / (2 - 最大值 - 最小值);
- 计算色相(H):如果 R = 最大值,则 H = (G - B) / 色域;如果 G = 最大值,则 H = 2 + (B - R) / 色域;如果 B = 最大值,则 H = 4 + (R - G) / 色域。最后将 H 乘以60,得到角度制下的色相值。
下面是 C 语言代码实现:
```c
#include <stdio.h>
void rgb_to_hsl(int r, int g, int b, double *h, double *s, double *l) {
double max = (r > g) ? ((r > b) ? r : b) : ((g > b) ? g : b);
double min = (r < g) ? ((r < b) ? r : b) : ((g < b) ? g : b);
double delta = max - min;
*l = (max + min) / 2.0;
if (delta == 0) {
*h = 0;
*s = 0;
} else {
if (*l < 0.5) {
*s = delta / (max + min);
} else {
*s = delta / (2 - max - min);
}
if (r == max) {
*h = (g - b) / delta;
} else if (g == max) {
*h = 2 + (b - r) / delta;
} else {
*h = 4 + (r - g) / delta;
}
*h *= 60.0;
if (*h < 0) {
*h += 360.0;
}
}
}
int main() {
int r, g, b;
double h, s, l;
printf("请输入 RGB 值(以空格分隔):");
scanf("%d %d %d", &r, &g, &b);
rgb_to_hsl(r, g, b, &h, &s, &l);
printf("HSL 值为:%.2f, %.2f, %.2f\n", h, s, l);
return 0;
}
```
阅读全文