赤、緑、青にそれぞれ 2 ビットずつ、6 ビットの色値を使用しています。したがって、黒は binary 000000
、 red 110000
、 blue 000011
、 yellow111100
などで表されます。
この色を 24 ビットの RGB 値に変換して、グラフィックス レイヤー (DirectFB) に渡す必要があります。3(バイナリ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] など)。
現在、これらの色は、テレビに表示されるテキストとキャプションの背景色であり、ビデオに埋め込まれた参照カラー パレットを含むテスト ストリームがあります。この式を使用して取得した 8 ビット カラーを画面に描画すると、ビデオに表示されている基準色と正確には一致しません。かなり近いですが、違いがあります。
変換を正しく行っていますか、または 2 ビット RGB カラー値を 8 ビット RGB 値に変換するための標準アルゴリズムはありますか? DirectFB は内部で別の表現 (RGB565 など) を使用している可能性がありますか?
85 を 48 (試行錯誤で見つけた値) に置き換えると、色はほぼ完全に一致します。