【发布时间】:2019-06-24 11:14:34
【问题描述】:
我是转换图像类型的新手。我想确定屏幕上每个像素的颜色。我可以从帧缓冲区中读取颜色,但它们都是 RGB565。为了跟踪某种颜色,我想将 RGB565 转换为 HSV,以便检查色调。
我已经尝试通过在线转换器将其从 RGB565 转换为 RGB888。例如 RGB565 '08F5' 到 RGB888 '081BAA'。然后从 RGB888 到 HSL '233 91% 35%'。但是,我无法使用 c 代码进行此操作。颜色采用 HEX 格式,每 2 存储在一个寄存器中。我为每种颜色制作了一个由四个组成的字符数组。
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];
}
}
有人知道如何将 RGB565 转换为 RGB888,然后在 C 中转换为 HSL?
【问题讨论】:
-
小毛病:颜色存储在各种整数位中。它们不是十六进制的,“十六进制”是表示为文本的数字的属性,而不是存储在计算机内存中的数字(当然,除非您将其存储为文本字符串)。
-
你有什么问题?提取 R、G 和 B 值 ?知道如何重新调整这些值?如何根据重新缩放的值计算 H、S 和 L?
-
嗯,实际上我对以上所有问题都感到困惑。但是以二进制形式提取 R、G 和 B 确实有效。然而,将它们重新缩放到 RGB888,然后再缩放到 HSL 对我来说是一个很大的谜团。我确实在网上找到了一些如何做到这一点的例子,但它们都不是 C 语言。
-
那么请显示您正在工作的代码部分(提取 R、G 和 B 值),以及您尝试的不工作部分。