Platform SDK: DirectX |
ここでは、C++ でのアプリケーション開発について説明する。
ディスプレイ デバイスがトゥルー RGB 色 (RGB 888) モードでないときに、アプリケーションでは、フレーム バッファの色空間に RGB 888 をマップする方法を見つけ出すことが必要となる場合がある。たとえば、16 ビットまたは 24 ビット RGB ディスプレイ モードで実行するアプリケーションの場合を考える。ある作品が作成されると、透過型ブリット カラー キーとして使用するために色が確保される。説明のために、ここでは RGB (128,64,255) のような 24 ビット カラーとする。アプリケーションが 16 ビット RGB モードでも実行できるようにするために、16 ビット RGB モードで実行する場合に使用するフレーム バッファの色空間にこの 24 ビットカラーをマップする方法を見つけ出す必要がある。
DirectDraw ではカラー マッチング サービスを行わないが、カラー キーがフレーム バッファにマッピングされる計算におけるいくつかの方法が用意されている。これらの方法は、いずれもかなり複雑である。ほとんどの場合、GDI 内蔵のカラーマッチング サービスを DirectDraw 直接フレーム バッファ アクセスと組み合わせて使用することで、色の値を異なる色空間にマップする方法を決定できる。実際、プラットフォーム SDK の DirectX の例にある Ddutil.cpp ソース ファイルには、このタスクを実行する DDColorMatch というサンプル関数が含まれている。DDColorMatch サンプル関数は、以下の主なタスクを行う。
DDColorMatch サンプル関数で使用されるプロセスは速くない。速さを意図したものではないからである。ただし、色を異なる RGB 色空間にマップする方法を決定するには信頼性の高い方法である。詳細については、Ddutil.cpp ソース ファイルにある DDColorMatch のソース コードを参照すること。
注 : SetPixel GDI 関数は入力に対する COLORREF 構造体を受け取るだけなので、この技術は RGB 888 カラーをフレーム バッファのピクセル フォーマットに適合するためだけに作用する。アプリケーションで他のピクセル フォーマットの色を適合しなくてはならない場合、この技術を使用したり、ピクセル フォーマットに対するプライマリ サーフェスを参照する前に、RGB 888 に転送して、手動で色を適合しなければならない。