3

赤、緑、青にそれぞれ 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 (試行錯誤で見つけた値) に置き換えると、色はほぼ完全に一致します。

4

1 に答える 1

5

私が知っている唯一の標準はEGAです-ウィキペディアにリファレンスがあります。

価値があるのは、6ビットは非常に小さなスペースです。64個の値だけです。CPU時間とメモリの両方の観点から変換を行う最も簡単な方法は、ほぼ確実に、サイズ64の配列で値を検索することです。特にテストデータがある場合、これは非常に簡単です。アレイ内のデータをテストします。そうすれば、それが標準であるかどうかを心配する必要はありません。標準は、このシステムで機能するものとまったく同じです。

于 2011-05-12T09:05:10.000 に答える