IMediaDet::GetBitmapBits-Methode

Hinweis

[Veraltet. Diese API wird möglicherweise aus zukünftigen Releases von Windows.]

Die GetBitmapBits -Methode ruft einen Videoframe zur angegebenen Medienzeit ab. Der zurückgegebene Frame hat immer das 24-Bit-RGB-Format.

Syntax

HRESULT GetBitmapBits(
   double StreamTime,
   long   *pBufferSize,
   char   *pBuffer,
   long   Width,
   long   Height
);

Parameter

StreamTime

Die Zeit, zu der der Videoframe abgerufen werden soll (in Sekunden).

pBufferSize

Empfängt die erforderliche Puffergröße. Wenn pBuffer NULL ist, erhält die Variable die Größe des Puffers, der zum Abrufen des Frames erforderlich ist. Wenn pBuffer nicht NULL ist, wird dieser Parameter ignoriert.

pBuffer

Zeiger auf einen Puffer, der eine BITMAPINFOHEADER-Struktur gefolgt von den DIB-Bits empfängt.

Width

Breite des Videobilds in Pixel.

Height

Höhe des Videobilds in Pixel.

Rückgabewert

Gibt einen HRESULT-Wert zurück. Folgende Werte sind möglich:

Rückgabecode Beschreibung
S _ OK
Erfolg.
E _ NOINTERFACE
Der Beispielgrabfilter konnte dem Diagramm nicht hinzugefügt werden.
E _ OUTOFMEMORY
Nicht genügend Arbeitsspeicher.
_E-ZEIGER
NULL-Zeigerfehler.
E _ UNEXPECTED
Unerwarteter Fehler.
VFW _ E _ INVALIDMEDIATYPE
Ungültiger Medientyp.

Hinweise

Legen Sie vor dem Aufrufen dieser Methode den Dateinamen und stream fest, indem Sie IMediaDet::p ut _ Filename und IMediaDet::p ut _ CurrentStream aufrufen.

Um die größe des erforderlichen Puffers zu bestimmen, rufen Sie diese Methode mit pBuffer gleich NULL auf. Die Größe wird in der Variablen zurückgegeben, auf die pBufferSize zeigt. Erstellen Sie dann den Puffer, und rufen Sie die -Methode erneut auf, während pBuffer der Adresse des Puffers entspricht. Wenn die Methode zurückgegeben wird, enthält der Puffer eine BITMAPINFOHEADER-Struktur gefolgt von der Bitmap. Die Bitmap wird auf die in den Parametern Width und Height angegebenen Dimensionen skaliert.

Diese Methode versetzt die Medienerkennung in den Bitmap-Greifmodus. Sobald diese Methode aufgerufen wurde, funktionieren die verschiedenen Streaminformationsmethoden in IMediaDet nicht mehr, es sei denn, Sie erstellen eine neue Instanz der Medienerkennung.

Hinweis

Die Headerdatei Qedit.h ist nicht mit Direct3D-Headern nach Version 7 kompatibel.

Hinweis

Um Qedit.h zu erhalten, laden Sie das Microsoft Windows SDK-Update für Windows Vista und .NET Framework 3.0 herunter. Qedit.h ist im Microsoft Windows SDK für Windows 7 und .NET Framework 3.5 Service Pack 1 nicht verfügbar.

Beispiele

Im folgenden Code wird die GetBitmapBits -Methode verwendet, um eine geräteunabhängige Bitmap zu erstellen.

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;
}

Anforderungen

Anforderung Wert
Header
Qedit.h
Bibliothek
Strmiids.lib

Siehe auch

IMediaDet-Schnittstelle

Fehler- und Erfolgscodes