次の方法で共有


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 を使用。

参照