次の方法で共有


IBasicVideo::GetCurrentImage

GetCurrentImage メソッドは、レンダラで待機している現在のイメージを取得する。

構文

  HRESULT GetCurrentImage(
  long *pBufferSize,
  long *pDIBImage
);

パラメータ

pBufferSize

[in, out] 呼び出し元が渡すバッファ サイズを含む変数へのポインタ。pDIBImage が NULL の場合は、この引数は必要なバッファ サイズを受け取る。

pDIBImage

[out] イメージ全体がデバイスに依存しないビットマップ (DIB) フォーマットで格納されるバッファへのポインタ。ポインタを、long 型のポインタにキャストすること。

戻り値

HRESULT 値を返す。

注意

ビデオ レンダラ フィルタと Video Mixing Renderer (VMR) は、このメソッドをそれぞれ異なるフォーマットで実装する。

ビデオ レンダラのみ :

このメソッドは、レンダラで DirectDraw アクセラレーションを使っていると失敗する。失敗するかどうかはエンドユーザーのハードウェア構成に依存するため、実際にはこのメソッドは信頼できない。

このメソッドを呼び出す前にビデオ レンダラをポーズすること。ポーズしていないと、VFW_E_NOT_PAUSED が返される。IMediaControl::GetState を呼び出して、ポーズ操作が完了していることを確認すること。完了していないと、GetCurrentImage メソッドは E_UNEXPECTED を返す。ソース フィルタで利用可能になるデータによっては、ビデオ レンダラがこの要求に応じない場合もある。利用可能なイメージがない場合は、E_FAIL が返される。

Video Mixing Renderer のみ :

このメソッドは、VMR が DirectDraw アクセラレーションを使っているかどうかにも、また現在のグラフ状態 (実行中、停止中、ポーズ中) にも関係なく、信頼性が高い。

ビデオ レンダラおよび Video Mixing Renderer 両方 :

イメージを保持するために必要なバッファ サイズを取得するには、pDIBImage 引数に NULL ポインタを指定してこのメソッドを呼び出すこと。必要なバッファ サイズが pBufferSize 引数によって返される。そのサイズのバッファを割り当て、そのバッファを指す pDIBImage を指定して、再びこのメソッドを呼び出す。2 回目の呼び出しでは、pBufferSize でバッファ サイズを指定すること。バッファが小さすぎてイメージを完全に保持できない場合は、このメソッドは E_OUTOFMEMORY を返す。

メソッドが成功すると、バッファには BITMAPINFOHEADER 構造体、Win32 BITMAPINFO 構造体に定義されているパレット エントリおよびビット マスクを含む DIB イメージ全体が書き込まれる。イメージのフォーマットはソース フィルタが提供するタイプに応じて異なり、事前に指定はできない。

参照