4

我正在尝试将 24 位(8R、8G、8B)转换为 8 位(RRRGGGBB)颜色

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

这对于带有大量红色和绿色的图片非常有效,但是一旦蓝色开始出现,事情就会变得非常糟糕。蓝色开始看起来比以前更蓝绿色或紫色。

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

我考虑将 RGB 转换为 HSV,然后转换为 8 位,但我也不确定如何从 HSV 转换为 8 位,H 字节不对应 RRRGGGBB。即使是这样,我也无法黑白分明。有没有办法对 H、S、V 字节进行加权(就像我对 RGB 所做的那样)以获得我想要的?还是我应该坚持在 RGB 直接到 8 位之间找到更好的映射

4

1 回答 1

1

要将 8bit [0 - 255] 值转换为 3bit [0, 7],0 没有问题,但记住 255 应该转换为 7,所以公式应该是 Red3 = Red8 * 7 / 255。

要将 24 位颜色转换为 8 位,

8bit Color = (Red8 * 7 / 255) << 5 + (Green8 * 7 / 255) << 2 + (Blue8 * 3 / 255)
于 2016-06-17T05:51:10.277 回答