我收到了六位的颜色数值,每个颜色由两位二进制数表示红、绿和蓝。因此,黑色用二进制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(通过试错找到的值)替换时,颜色几乎完美匹配。