Microsoft DirectX 8.0 |
CImagePalette クラスは、パレットを作成および管理しなければならないイメージ レンダラ用の特殊なクラスである。このクラスを使用して、フォーマット ブロックに VIDEOINFO 構造体を格納するメディア フォーマットからパレット ハンドルを作成することができる。パフォーマンスを最大化するために、このクラスは同一パレット (現在のシステム パレットと同じパレット) であるパレットを作成し、更新の前に比較して、実際に必要な場合にのみパレットを変更する。
プロテクト データ メンバ
m_hPalette このオブジェクトによって所有されるパレット ハンドル。 m_pBaseWindow パレットが実現されるウィンドウ。 m_pDrawImage 描画を実行するオブジェクト。 m_pMediaFilter イベントの送信先のメディア フィルタ。
メンバ関数
CImagePalette CImagePalette オブジェクトを作成する。 CopyPalette YUV またはトゥルーカラーの VIDEOINFOHEADER 構造体からパレット化された VIDEOINFOHEADER 構造体にパレットをコピーする。 MakeIdentityPalette パレット エントリを同一パレットにする。 MakePalette 指定されたビデオ イメージからカラー パレットを取得する。 PreparePalette パレットの更新および作成のエントリ ポイントを指定する。 RemovePalette 割り当てられたすべてのパレット リソースを解放する。 ShouldUpdate パレットを動的に更新するための内部ヘルパー メンバ関数を指定する。
CImagePalette オブジェクトを作成する。
構文
CImagePalette( CBaseFilter *pBaseFilter, CBaseWindow *pBaseWindow, CDrawImage *pDrawImage );
パラメータ
- pBaseFilter
- このクラスを所有するフィルタへのポインタ。
- pBaseWindow
- パレットを実現するウィンドウへのポインタ。
- pDrawImage
- このパレットを使用して描画するオブジェクトへのポインタ。
戻り値
戻り値なし。
注意
このクラスは、ウィンドウ パレットの作成、管理、および削除を処理する。このクラスは、パレットに関連するほかの多くのオブジェクトに渡される。このクラスは、新しいカラーのセットが現在のセットと異なる場合にのみ、要求されたパレットの変更を実行するように最適化されている。パレットの変更は時間がかかる処理なので、これはパフォーマンス上の最適化である。
このコンストラクタには、所有するフィルタ (pBaseFilter) が渡される。これは有効なポインタでなければならない。このクラスが実際にパレットを作成する場合、このクラスは、所有するフィルタに EC_PALETTE_CHANGED メッセージをフィルタ グラフ マネージャに送信するよう指示する。このコンストラクタには、さらに 2 つのオブジェクト ポインタが渡される。pBaseWindow が Null ではない場合、レンダラが新しいパレットを作成するときに、このクラスは自動的にそのパレットをこのウィンドウにインストールする。パレットを削除するように指示された場合、このクラスはベース ウィンドウからパレットを削除し、その代わりに標準 VGA パレットをインストールする。
このコンストラクタには、CDrawImage クラスから派生した描画オブジェクトを渡すこともできる。この描画オブジェクトが NULL 以外の場合、新しいパレットを作成するときに、このクラスは描画オブジェクトにパレットが変更されたことを通知する。これは、通常、ウィンドウ オブジェクトと組み合わせて使用される。これによって、パレットが変更されると描画オブジェクトに通知され、描画オブジェクトは、CreateDIBSection を使用して作成された、そのオブジェクトが所有するサンプルを更新できる。これはサンプルの内部カラー テーブルを更新しなければならないことがあるためである。
YUV またはトゥルーカラーの VIDEOINFOHEADER 構造体からパレット化された VIDEOINFOHEADER 構造体にパレットをコピーする。
構文
HRESULT CopyPalette( const CMediaType *pSrc, const CMediaType *pDest );
パラメータ
- pSrc
- コピー元メディア タイプへのポインタ。
- pDest
- コピー先メディア タイプへのポインタ。
戻り値
成功した場合は NOERROR を返す。使用できるパレットがない場合は S_FALSE を返す。
注意
このメンバ関数は、DirectDraw® サンプルについてパレットを変更したときに使用される。レンダラへのコピー元になるフィルタは、パレットを任意のバッファにアタッチして、新しい VIDEOINFOHEADER フォーマットとしてレンダラに渡すことができる。次に、レンダラは CopyPalette を呼び出して、そのフォーマットから新しいパレットを作成し、パレット カラーを新しい接続タイプにコピーする。
PALETTEENTRY 構造体を変更し、同一パレットを作成する。
構文
HRESULT MakeIdentityPalette( PALETTEENTRY *pEntry, INT iColours, LPSTR szDevice );
パラメータ
- pEntry
- 予測されるパレット カラーの配列へのポインタ。
- iColours
- 配列のカラーの数。
- szDevice
- 転送先デバイスの名前を含む文字列へのポインタ。省略した場合、このパラメータのデフォルトはメイン デバイスになる。
戻り値
成功した場合は NOERROR を返す。それ以外の場合は S_FALSE を返す。
注意
パレットがウィンドウにインストールされると、GDI は可能であれば要求されたカラーを圧縮する。したがって、たとえば、配列に黒のエントリが 5 つ含まれる場合、これらは 1 つのパレット エントリに圧縮される。これは、多くのアプリケーションで便利である。ただし、ビデオを描画する場合、これによって GDI は指定されたイメージ内のピクセルを圧縮されたパレットにマップしなければならない。この場合、パフォーマンスは大幅に低下する。
したがって、指定された PALETTEENTRY フィールドを調整して、カラーが圧縮されないようにしなければならない。これは、イメージを表示するウィンドウがフォアグラウンド フォーカスを持つ場合に、このオブジェクトによって作成されたパレットが、ディスプレイ デバイスで選択されたパレット (同一パレット) に直接マップすることを意味する。
指定されたビデオ イメージからカラー パレットを取得する。
構文
HPALETTE MakePalette( const VIDEOINFOHEADER *pVideoInfo, LPSTR szDevice );
パラメータ
- pVideoInfo
- 必要なパレット カラーのコンテナへのポインタ。
- szDevice
- 転送先デバイスの名前を含む文字列へのポインタ。省略した場合、このパラメータのデフォルトはメイン デバイスになる。
戻り値
新しいパレットのハンドルを返す。失敗した場合は NULL を返す。
パレットの作成およびインストールのエントリ ポイントを指定する。
構文
HRESULT PreparePalette( const CMediaType *pmtNew, const CMediaType *pmtOld, LPSTR szDevice );
パラメータ
- pmtNew
- 新しいパレット情報を保持するメディア タイプへのポインタ。
- pmtOld
- 古いパレット情報を保持するメディア タイプへのポインタ。
- szDevice
- 転送先デバイスの名前を含む文字列へのポインタ。省略した場合、このパラメータのデフォルトはメイン デバイスになる。
戻り値
HRESULT 値を返す。
注意
これは、新しいパレットを作成するためのメイン エントリ ポイントである。このメンバ関数は、要求されたパレット カラーが変更されていないという状況を検出しようとする。パレット カラーが変更されていない場合は、新しいパレットを作成する必要がない。古いメディア タイプを使用して、カラーが変更されたかどうかを判断する。また、オプションでウィンドウへのパレットのインストール (指定された場合) や、フィルタ グラフ マネージャへのパレットの変更の通知 (このために、コンストラクタに渡されたフィルタを使用する) を処理する。最後に、描画オブジェクトへのパレットの変更の通知を処理する。これも、コンストラクタに描画オブジェクトが渡されたかどうかに応じてオプションである。
以前に作成したパレットを削除する。
構文
HRESULT RemovePalette(void);
戻り値
HRESULT 値を返す。現在の実装では NOERROR を返す。
新しいパレットを作成する必要があるかどうかを判断する。
構文
BOOL ShouldUpdate( const VIDEOINFOHEADER *pNewInfo, const VIDEOINFOHEADER *pOldInfo );
パラメータ
- pNewInfo
- 新しいカラーのセットを格納する VIDEOINFOHEADER 構造体へのポインタ。
- pOldInfo
- 古いカラーのセットを格納する VIDEOINFOHEADER 構造体へのポインタ。
戻り値
次のいずれかの値を返す。
TRUE 新しいパレットが必要である。 FALSE 既存のパレットを使用できる。
注意
この関数を使用して、新しいパレットを作成する必要があるかどうかをテストする。元のタイプがパレットを使用せず、新しいタイプがパレットを使用する場合 (またはその逆の場合)、このメソッドは TRUE を返す。いずれのフォーマットもパレットを使用しない場合、このメソッドは FALSE を返す。両方のフォーマットがパレットを使用する場合はカラーが比較され、一致する場合、このメソッドは FALSE を返す。