IMediaDet::GetBitmapBits メソッド
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
Note
[非推奨。 この API は、Windows の今後のリリースから削除される可能性があります。]
メソッドは GetBitmapBits
、指定されたメディア時刻にビデオ フレームを取得します。 返されるフレームは、常に 24 ビット RGB 形式です。
構文
HRESULT GetBitmapBits(
double StreamTime,
long *pBufferSize,
char *pBuffer,
long Width,
long Height
);
パラメーター
-
StreamTime
-
ビデオ フレームを取得する時間 (秒単位)。
-
pBufferSize
-
必要なバッファー サイズを受け取ります。 pBuffer が NULL の場合、変数はフレームの取得に必要なバッファーのサイズを受け取ります。 pBuffer が NULL でない場合、このパラメーターは無視されます。
-
pBuffer
-
BITMAPINFOHEADER 構造体とそれに続く DIB ビットを受け取るバッファーへのポインター。
-
Width
-
ビデオ 画像の幅 (ピクセル単位)。
-
Height
-
ビデオ 画像の高さ (ピクセル単位)。
戻り値
HRESULT 値を返します。 次の値があります。
リターン コード | 説明 |
---|---|
|
成功しました。 |
|
サンプル グラバー フィルターをグラフに追加できませんでした。 |
|
メモリ不足です。 |
|
NULL ポインター エラー。 |
|
予期しないエラー。 |
|
メディアの種類が無効です。 |
解説
このメソッドを呼び出す前に、 IMediaDet::p ut_Filename と IMediaDet::p ut_CurrentStream を呼び出して、ファイル名とストリームを設定します。
必要なバッファーのサイズを確認するには、 pBuffer が NULL に等しいこのメソッドを呼び出します。 サイズは、 pBufferSize が指す変数で返されます。 次に、バッファーを作成し、 pBuffer がバッファーのアドレスと等しいメソッドをもう一度呼び出します。 メソッドが返されると、バッファーには BITMAPINFOHEADER 構造体の後にビットマップが格納されます。 ビットマップは、 Width パラメーターと Height パラメーターで指定された寸法にスケーリングされます。
このメソッドは、メディア検出機能をビットマップ グラブ モードにします。 このメソッドが呼び出されると、メディア検出機能の新しいインスタンスを作成しない限り、 IMediaDet のさまざまなストリーム情報メソッドは機能しません。
Note
ヘッダー ファイル Qedit.h は、バージョン 7 より後の Direct3D ヘッダーと互換性がありません。
Note
Qedit.h を取得するには、Windows Vista および .NET Framework 3.0 用の Microsoft Windows SDK Update をダウンロードします。 Qedit.h は、Windows 7 および .NET Framework 3.5 Service Pack 1 のMicrosoft Windows SDKでは使用できません。
例
次のコードでは、 メソッドを GetBitmapBits
使用して、デバイスに依存しないビットマップを作成します。
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);
// Find the address of the start of the image data.
void *pData = pBuffer + sizeof(BITMAPINFOHEADER);
// Note: In general a BITMAPINFOHEADER can include extra color
// information at the end, so calculating the offset to the image
// data is not generally correct. However, the IMediaDet interface
// always returns an RGB-24 image with no extra color information.
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;
}
要件
要件 | 値 |
---|---|
ヘッダー |
|
ライブラリ |
|
関連項目