gpt4 book ai didi

c - 如何在 C 中将 RGB565 转换为 HSL 颜色

转载 作者:太空宇宙 更新时间:2023-11-04 04:11:34 25 4
gpt4 key购买 nike

我是转换图像类型的新手。我想确定屏幕上每个像素的颜色。我可以从帧缓冲区读取颜色,但它们都是 RGB565。为了跟踪某种颜色,我想将 RGB565 转换为 HSV,以便检查色调。

我已经尝试通过在线转换器将其从 RGB565 转换为 RGB888。例如 RGB565 '08F5' 到 RGB888 '081BAA'。然后从 RGB888 到 HSL '233 91% 35%'。但是,我无法使用 c 代码进行此操作。颜色采用十六进制格式,每 2 个存储在一个寄存器中。我为每种颜色制作了一个包含四个字符的 char 数组。

int colorcodes = IORD_ALTERA_AVALON_PIO_DATA(0x08000000 + 123204);
char colorcodesInHex[9];
snprintf(colorcodesInHex, 9, "%08x\n", colorcodes);

char firstColor[4];
char secondColor[4];

for(int i = 0; i <= 7; i++)
{
if(i <= 3)
{
firstColor[i] = colorcodesInHex[i];
}
else if (i >= 4 && i <= 7)
{
secondColor[i - 4] = colorcodesInHex[i];
}
}

有人知道如何在 C 中将 RGB565 转换为 RGB888,然后再转换为 HSL 吗?

最佳答案

  int rgb565 = ...; // 16 bit value with rrrrrggggggbbbbb

double r = ((rgb565 >> 11) & 0x1F) / 31.0; // red 0.0 .. 1.0
double g = ((rgb565 >> 5) & 0x3F) / 63.0; // green 0.0 .. 1.0
double b = (rgb565 & 0x1F) / 31.0; // blue 0.0 .. 1.0

double cmax = max(r, max(g, b));
double cmin = min(r, min(g, b));
double delta = cmax - cmin;

// hue (in °)
double h_degrees = delta == 0.0 ? 0.0
: cmax == r ? 60 * (((g - b) / delta) % 6)
: cmax == g ? 60 * (((b - r) / delta + 2)
: /* cmax == b ? */ 60 * (((r - g) / delta + 4);

// saturation
double s = delta == 0.0 ? 0.0 : delta / (1.0 - abs(cmax + cmin - 1));

// lightness
double l = (cmax + cmin)/2;

RGB565是红绿蓝的16位封装。以上是RGB565转HSL。

Hue 的度数为 0° 到 360°

  • 红/绿/蓝分量通过移位 >>> 提取,然后缩放到 0.0 - 1.0。

  • 生成的亮度是一个不完美的平均值,即最小和最大颜色分量值的平均值。

  • 色调,色度,是分成三种 RGB 颜色的色环中的角度。

  • 饱和度,灰度倾向,定义为较小的delta。

关于c - 如何在 C 中将 RGB565 转换为 HSL 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56735379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com