将两位颜色转换为八位颜色

我的颜色值有六位,红色,绿色和蓝色各有两位。 因此,黑色将被表示为二进制000000 ,红色110000 ,蓝000011 ,黄色111100等。

我必须将此颜色转换为24位rgb值,以将其传递到图形层(DirectFB)。 由于三(二进制11)将变为255(0xFF),因此我使用85(= 255/3)作为转换因子的下列公式。

r = (color_6bit >> 4) * FACTOR;
g = ((color_6bit >> 2) & 0x3) * FACTOR;
b = (color_6bit & 0x3) * FACTOR;

color_32bit = (r << 16)| (g << 8) | b;

这正确地转换颜色(白色[0x3F - > 0xFFFFFF],红色[0x30 - > 0xFF0000]等)。

现在,这些颜色是在电视上显示的字幕的文本和背景颜色,并且我们有测试流,在视频中嵌入了参考调色板。 当我将使用此公式获得的八位色彩绘制到屏幕上时,它与视频中存在的参考色彩不完全匹配 - 它非常接近,但是存在差异。

我是否正确地进行了转换,或者是否有任何将两位rgb颜色值转换为八位rgb值的标准算法? DirectFB可以在内部使用一些不同的表示(如RGB565)吗?

值得一提的是,当系数85被替换为48(通过反复试验发现的值)时,颜色几乎完美匹配。


我知道的唯一标准是EGA - 这里有一个关于维基百科的参考。

对于它的价值,6位是非常小的空间 - 只有64个值。 在cpu时间和内存方面进行转换的最快方法几乎肯定只是查找64位数组中的值。特别是如果您有测试数据,这非常简单 - 只需将64个值测试数组中的数据。 这样你就不用担心它是否是一个标准 - 这个标准恰恰适用于这个系统。

链接地址: http://www.djcxy.com/p/87799.html

上一篇: Converting two bit color to eight bit color

下一篇: Decimal color to RGB color