转换24位RGB和8位颜色之间的差异

4

我试图将24位(8R,8G,8B)转换为8位(RRRGGGBB)颜色。

我理解基本的概念是将颜色字节缩小并将它们相加(移位后)。例如,给定RGB(255,254,253),我会取255/32*32 + 254/32*4 + 253/64,这将给出111,111,11b(白色)。

对于具有大量红色和绿色的图片,这样做效果很好,但一旦蓝色开始出现,事情就变得非常混乱。蓝色开始看起来比以前更像青色或紫色。

我不是在尝试进行抖动,而是要找到更好的RGB和8位之间的映射。

我考虑将RGB转换为HSV,然后再转换为8位,但我不知道如何从HSV转换为8位,因为H字节与RRRGGGBB不对应。即使它对应,我也无法得到黑色和白色。是否有一种方法可以加权处理H、S、V字节(就像我处理RGB一样)以得到我想要的结果?或者我应该坚持直接找到更好的RGB到8位的映射。


你会使用特定的编程语言吗?因为它可能已经提供了你需要的操作。 - Andre M
它是用汇编语言编写的。 - Vbomm
仅使用2位蓝色通道信息,不要期望颜色看起来正确。如果您不进行抖动处理,那么您的效果还可以,但不会有更好的转换为RRRGGGBB。8位调色板图像可能会看起来更好。 - galinette
1个回答

1
将8位[0-255]值转换为3位[0,7],0不是问题,但请记住255应转换为7,因此公式应为Red3 = Red8 * 7/255。
将24位色彩转换为8位,
8bit Color = (Red8 * 7 / 255) << 5 + (Green8 * 7 / 255) << 2 + (Blue8 * 3 / 255)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接