我有六位颜色值,红色、绿色和蓝色各有两位。所以黑色将被表示为 binary 000000
、 red 110000
、 blue 000011
、 yellow111100
等等。
我必须将此颜色转换为 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(通过反复试验找到的值)时,颜色几乎完美匹配。