IMediaDet::GetBitmapBits-Methode

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]

Hinweis

[Veraltet. Diese API kann aus zukünftigen Versionen von Windows entfernt werden.]

 

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

Syntax

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

Parameter

StreamTime

Zeit zum Abrufen des Videoframes in Sekunden.

pBufferSize

Empfängt die erforderliche Puffergröße. Wenn pBufferNULL ist, empfängt 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 Filter Sample Grabber konnte dem Diagramm nicht hinzugefügt werden.
E_OUTOFMEMORY
Nicht genügend Arbeitsspeicher.
E_POINTER
NULL-Zeigerfehler.
E_UNEXPECTED
Unerwarteter Fehler.
VFW_E_INVALIDMEDIATYPE
Ungültiger Medientyp.

 

Bemerkungen

Legen Sie vor dem Aufrufen dieser Methode den Dateinamen und den 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 von pBufferSize verwiesen wird. Erstellen Sie dann den Puffer, und rufen Sie die Methode erneut auf, wobei pBuffer gleich der Adresse des Puffers ist. Wenn die Methode zurückgibt, enthält der Puffer eine BITMAPINFOHEADER-Struktur gefolgt von der Bitmap. Die Bitmap wird auf die Dimensionen skaliert, die in den Parametern Breite und Höhe angegeben sind.

Mit dieser Methode wird der Mediendetektor in den Bitmap-Grabmodus versetzt. Sobald diese Methode aufgerufen wurde, funktionieren die verschiedenen Streaminformationsmethoden in IMediaDet nicht mehr, es sei denn, Sie erstellen eine neue instance des Mediendetektors.

Hinweis

Die Headerdatei Qedit.h ist nicht mit Direct3D-Headern ab 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