IMediaDet::GetBitmapBits
GetBitmapBits メソッドは、指定されたメディア タイムのビデオ フレームを取得する。返されるフレームは、常に 24 ビット RGB フォーマットである。
構文
HRESULT GetBitmapBits(
double StreamTime,
long *pBufferSize,
char *pBuffer,
long Width,
long Height
);
パラメータ
StreamTime
ビデオ フレームを取得する時間 (秒単位)。
pBufferSize
必要なバッファ サイズを受け取る変数へのポインタ。pBuffer が NULL の場合、この変数はフレームの取得に必要なバッファのサイズを受け取る。pBuffer が NULL でない場合、この引数は無視される。
pBuffer
DIB ビットが後に続く BITMAPINFOHEADER 構造体を受け取るバッファへのポインタ。
Width
ビデオ イメージの幅 (ピクセル単位)。
Height
ビデオ イメージの高さ (ピクセル単位)。
戻り値
HRESULT 値を返す。次のいずれかの値を返す。
値 | 説明 |
S_OK | 成功。 |
E_NOINTERFACE | サンプル グラバ フィルタをグラフに追加できなかった。 |
E_OUTOFMEMORY | メモリ不足。 |
E_POINTER | NULL ポインタ エラー。 |
E_UNEXPECTED | 予期せぬエラー。 |
VFW_E_INVALIDMEDIATYPE | 無効なメディア タイプ。 |
注意
このメソッドを呼び出す前に、IMediaDet::put_Filename および IMediaDet::put_CurrentStream を呼び出してファイル名とストリームを設定すること。
必要なバッファのサイズを決定するには、pBuffer を NULL にしてこのメソッドを呼び出す。サイズは、pBufferSize が指す変数に返される。その後バッファを作成し、pBuffer をバッファのアドレスと同じにしてメソッドをもう一度呼び出す。メソッドが返ったとき、バッファには BITMAPINFOHEADER 構造体が含まれ、ビットマップが後に続く。ビットマップは、Width および Height 引数で指定されたサイズになる。
このメソッドは、メディア ディテクタをビットマップ グラブ モードに設定する。このメソッドが呼び出された後は、メディア ディテクタの新しいインスタンスを作成しなければ、IMediaDet のさまざまなストリーム情報取得メソッドは機能しない。
サンプル コード
以下のコードは、GetBitmapBits メソッドを使って DIB (デバイスに依存しないビットマップ) を作成する。
long size;
hr = pDet->GetBitmapBits(0, &size, 0, width, height);
if (SUCCEEDED(hr))
{
char *pBuffer = new char[size];
if (!pBuffer)
return E_OUTOFMEMORY;
try {
hr = pDet->GetBitmapBits(0, 0, pBuffer, width, height);
}
catch (...) {
delete [] pBuffer;
throw;
}
if (SUCCEEDED(hr))
{
BITMAPINFOHEADER *bmih = (BITMAPINFOHEADER*)pBuffer;
HDC hdcDest = GetDC(0);
// イメージ データの開始アドレスを見つける。
void *pData = pBuffer + sizeof(BITMAPINFOHEADER);
// 注 : 通常、BITMAPINFOHEADER の末尾には色に関する追加情報が
// 含まれるので、イメージ データのオフセット計算は一般に
// 正しくない。 ただし、IMediaDet インターフェイスは
// 常に RGB-24 イメージを色の追加情報なしで返す。
BITMAPINFO bmi;
ZeroMemory(&bmi, sizeof(BITMAPINFO));
CopyMemory(&(bmi.bmiHeader), bmih, sizeof(BITMAPINFOHEADER));
HBITMAP hBitmap = CreateDIBitmap(hdcDest, bmih, CBM_INIT,
pData, &bmi, DIB_RGB_COLORS);
}
delete[] pBuffer;
}
要件
ヘッダー : Qedit.h をインクルードする。このヘッダー ファイルは、バージョン 7 以降の Microsoft® Direct3D® のヘッダーとは互換性がない。
ライブラリ : strmiids.lib を使用。
参照