Colors 在24位RGB和8位颜色之间转换

Colors 在24位RGB和8位颜色之间转换,colors,converter,rgb,dithering,Colors,Converter,Rgb,Dithering,我正在尝试将24位(8R、8G、8B)转换为8位(RRRGGGBB)颜色 我理解缩小颜色字节并将它们相加(移位后)的基本概念。i、 e.给定RGB(255254253),我将取255/32*32+254/32*4+253/64,这将得到111111,11b(白色) 这对于有很多红色和绿色的图片来说效果很好,但是一旦蓝色开始出现,事情就会变得很糟糕。蓝色开始看起来比以前更蓝或更紫 我不是在尝试抖动,而是在RGB和8bit之间找到更好的映射 我考虑过将RGB转换为HSV,然后再转换为8位,但我也不确

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

我理解缩小颜色字节并将它们相加(移位后)的基本概念。i、 e.给定RGB(255254253),我将取255/32*32+254/32*4+253/64,这将得到111111,11b(白色)

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

我不是在尝试抖动,而是在RGB和8bit之间找到更好的映射


我考虑过将RGB转换为HSV,然后再转换为8位,但我也不确定如何将HSV转换为8位,H字节与RRRGGGBB不对应。即使是这样,我也无法得到黑白照片。有没有办法对H、S、V字节进行加权(就像我对RGB所做的那样)以得到我想要的?或者我应该继续寻找一个更好的RGB到8位之间的映射,将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)

8bit Color=(Red8*7/255)您是否要使用特定的语言,因为它可能已经为您提供了所需的操作?它在汇编中编写,只有蓝色通道的2位信息,不要期望颜色看起来正确。你做得很好,如果你不犹豫的话,将不会有任何更好的转换到RRRGGGBB。8位调色板图像可能看起来更好