CDrawImage クラス
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
クラスは CDrawImage
、ビデオ レンダラー フィルターの描画を管理するヘルパー クラスです。 すべての描画操作は GDI を使用して実行されます。 このクラスでは、DirectDraw を使用したレンダリングはサポートされていません。 クラスでは CDrawImage
、所有フィルターでビデオ ウィンドウを管理する CBaseWindow クラスも使用する必要があります。 コンストラクターはCDrawImage
、CBaseWindow オブジェクトへのポインターを受け取ります。
次の図は、カスタム ビデオ レンダラー フィルターでこのクラスを使用する推奨される方法を示しています。
このクラスを使用するには、次の操作を行います。
- ピンが接続されたら、 CDrawImage::NotifyMediaType メソッドと CDrawImage::NotifyAllocator メソッドを呼び出します。
- メディアの種類が変更されるたびに、 NotifyMediaType をもう一度呼び出します。
- レンダリングが行われる前に、 CDrawImage::SetDrawContext を呼び出します。
- ソース四角形が変更された場合は CDrawImage::SetSourceRect を呼び出し、ターゲット四角形が変更された場合 は CDrawImage::SetTargetRect を呼び出します。
- 次のパレットのセクションで説明されているように、淡色化された画像のパレットを管理します。
アロケーター
前の図に示したフィルターでは、カスタム アロケーター クラス CImageAllocator が使用されています。 このアロケーターは、GDI CreateDIBSection 関数を使用して、共有メモリに DIB を作成します。 アロケーターによって作成されるサンプルは CImageSample オブジェクトです。
フィルターが接続のアロケーターを所有している場合、メディア サンプルは CImageSample オブジェクトであることが保証されます。 その場合、 CDrawImage オブジェクトは BitBlt または StretchBlt を使用して描画を最適化できます。 それ以外の場合は、低速の SetDIBitsToDevice 関数または StretchDIBits 関数を使用する 必要があります。 高速オプションは 、CDrawImage::FastRender メソッドによって実装されます。これは、 CDrawImage::SlowRender メソッドの低速オプションです。 (名前にもかかわらず、特に新しいハードウェアでは、 SlowRender でパフォーマンスに大きな影響を受けることはありません)。
パレット
描画に FastRender メソッドを使用し、イメージを淡色化する場合、フィルターは次のようにパレットを管理する必要があります。
- CImageSample クラスには、DIBDATA 構造体に格納されているパレット バージョン番号が含まれています。 値は、アロケーターがサンプルを作成するときに初期化されます。
- CDrawImage クラスには、作成時に初期化されるパレット バージョン番号も含まれています。
- メディアの種類が新しい淡色化された形式に変更されるたびに、 CDrawImage::IncrementPaletteVersion を呼び出します。 このメソッドは、 CDrawImage オブジェクトのパレット バージョン番号をインクリメントします。 フィルターで CImagePalette クラスを使用してパレット情報を管理する場合は、メディアの種類が変更されるたびに CImagePalette::P reparePalette を呼び出すことができます。 PreparePalette メソッドは、必要な場合にのみパレットのバージョンをインクリメントします。
- FastRender メソッドは、CDrawImage パレット バージョンとサンプルのパレット バージョンを比較します。 サンプルのバージョン番号が CDrawImage バージョン番号よりも遅れている場合、 FastRender メソッドはCDrawImage::UpdateColourTable を呼び出します。 UpdateColourTable メソッドは、GDI SetDIBColorTable 関数を使用して、デバイス コンテキストでカラー テーブルを設定します。 また、サンプルのパレット バージョンが現在のバージョン番号に更新されます。
- ピンが再接続した場合、フィルターは CDrawImage::ResetPaletteVersion を呼び出してパレットのバージョンをリセットする必要があります。 ピン再接続時に、アロケーターはすべてのサンプルを再割り当てします。
保護されたメンバー変数 | 説明 |
---|---|
m_bStretch | ビデオ イメージを目的のウィンドウに合わせて拡大する必要があるかどうかを示します。 |
m_bUsingImageAllocator | ピン接続のアロケーターが CImageAllocator オブジェクトであるかどうかを示します。 |
m_EndSample | 最新のサンプルの停止時間を指定します。 |
M_hdc | 所有ウィンドウのデバイス コンテキストを処理します。 |
m_MemoryDC | 所有ウィンドウのメモリ デバイス コンテキストを処理します。 |
m_PaletteVersion | パレットがいつ変更されたのか追跡するために使用されます。 |
m_pBaseWindow | 所有している CBaseWindow オブジェクトへのポインター。 |
m_pMediaType | 現在のメディアの種類へのポインター。 |
m_SourceRect | 描画のソース四角形を指定します。 |
m_StartSample | 最新のサンプルの開始時刻を指定します。 |
m_TargetRect | 描画対象の四角形を指定します。 |
プロテクト メソッド | 説明 |
DisplaySampleTimes | ビデオ画像の上にメディア サンプルのタイムスタンプを描画します。 |
FastRender | BitBlt 関数または StretchBlt 関数を使用してビデオイメージを描画します。 |
SetStretchMode | ビデオ イメージを拡大する必要があるかどうかを計算します。 |
SlowRender | SetDIBitsToDevice 関数または StretchDIBits 関数を使用してビデオイメージを描画します。 |
UpdateColourTable | 新しいパレットでカラー テーブルを更新します。 |
パブリック メソッド | 説明 |
CDrawImage | コンストラクター メソッド。 |
Drawimage | ビデオ ウィンドウにビデオ フレームを描画します。 |
DrawVideoImageHere | メディア サンプルから指定したデバイス コンテキストに画像を描画します。 |
GetPaletteVersion | パレットのバージョンを取得します。 |
GetSourceRect | 現在のソース四角形を取得します。 |
GetTargetRect | 現在の変換先の四角形を取得します。 |
IncrementPaletteVersion | パレットのバージョンをインクリメントします。 |
NotifyAllocator | 接続の CDrawImage アロケーターが CImageAllocator オブジェクトであるかどうかをオブジェクトに通知します。 |
NotifyEndDraw | サポートされていません。 |
NotifyMediaType | 現在のメディアの種類をオブジェクトに通知します。 |
NotifyStartDraw | サポートされていません。 |
ResetPaletteVersion | パレットのバージョンをリセットします。 |
ScaleSourceRect | ネイティブ ビデオ サイズとメディアの種類の形式に違いがある場合は、指定したソース四角形をスケーリングします。 仮想。 |
SetDrawContext | 描画に使用するデバイス コンテキストを設定します。 |
SetSourceRect | ソースの四角形を設定します。 |
SetTargetRect | ターゲットの四角形を設定します。 |
UsingImageAllocator | 現在のアロケーターが CImageAllocator オブジェクトかどうかを示します。 |
要件
要件 | 値 |
---|---|
ヘッダー |
|
ライブラリ |
|