Share via


IMFVideoMixerBitmap::SetAlphaBitmap-Methode (evr9.h)

Legt ein Bitmapbild für den erweiterten Videorenderer (EVR) fest, um eine Alpha-Blendung mit dem Video zu erstellen.

Syntax

HRESULT SetAlphaBitmap(
  [in] const MFVideoAlphaBitmap *pBmpParms
);

Parameter

[in] pBmpParms

Zeiger auf eine MFVideoAlphaBitmap-Struktur , die Informationen zur Bitmap, den Quell- und Zielrechtecken, dem Farbschlüssel und anderen Informationen enthält.

Rückgabewert

Die Methode gibt ein HRESULT zurück. Mögliches Werte (aber nicht die Einzigen) sind die in der folgenden Tabelle.

Rückgabecode BESCHREIBUNG
S_OK
Die Methode wurde erfolgreich ausgeführt.
E_INVALIDARG
Die in der pBmpParms-Struktur definierten Füllparameter sind ungültig.

Bemerkungen

Die Anwendung kann das Bild entweder als GDI-Bitmap oder als Direct3D-Oberfläche bereitstellen. Der EVR-Mixer mischt das Bild mit dem nächsten Videorahmen und allen nachfolgenden Frames, bis das Bild geändert oder entfernt wird. Das Bild kann eingebettete Alphainformationen pro Pixel enthalten, sodass transparente Regionen definiert werden können. Transparente Bereiche können auch mithilfe eines Farbschlüsselwerts identifiziert werden.

Wenn Sie eine Direct3D-Oberfläche verwenden, muss das Oberflächenformat 32-Bit-RGB sein, entweder D3DFMT_X8R8G8B8 oder D3DFMT_A8R8G8B8, und die Oberfläche muss aus dem D3DPOOL_SYSTEMMEM Speicherpool zugeordnet werden.

Es gibt keine definierte Beschränkung für die Häufigkeit der Übergabe von Bildern an den Videorenderer. Ein mehrmalses Ändern des Bilds pro Sekunde kann sich jedoch auf die Leistung und Glätte des Videos auswirken.

Beispiele

Im folgenden Beispiel wird eine GDI-Bitmap für die Alphamischung festgelegt. Für die Zwecke des Beispiels werden vordefinierte Einstellungen für das Zielrechteck und den Alphawert verwendet.

HRESULT EVRPlayer::SetBitmapImage(BOOL bEnable, HBITMAP hBitmap)
{
    const float fBitmapAlpha = 0.5f; 

    HRESULT hr = S_OK;

    // To enable the bitmap, you must supply a valid bitmap handle.
    if (bEnable && (hBitmap == NULL))
    {
        return E_INVALIDARG;
    }
    
    // Make sure we have an IMFVideoMixerBitmap pointer.
    if (m_pMixerBitmap == NULL)
    {
        return E_FAIL;
    }

    if (bEnable)
    {
        // Place the bitmap in the lower-right quadrant of the video.
        MFVideoNormalizedRect nrcDest = { 0.5f, 0.5f, 1.0f, 1.0f };

        // Get the device context for the video window.
        HDC hdc = GetDC(m_hwndVideo);

        // Create a compatible DC and select the bitmap into the DC>
        HDC hdcBmp = CreateCompatibleDC(hdc);
        HBITMAP hOld = (HBITMAP)SelectObject(hdcBmp, hBitmap);

        // Fill in the blending parameters.
        MFVideoAlphaBitmap bmpInfo;
        ZeroMemory(&bmpInfo, sizeof(bmpInfo));
        bmpInfo.GetBitmapFromDC = TRUE; // Use a bitmap DC (not a Direct3D surface).
        bmpInfo.bitmap.hdc = hdcBmp;
        bmpInfo.params.dwFlags = 
            MFVideoAlphaBitmap_Alpha | MFVideoAlphaBitmap_DestRect;
        bmpInfo.params.fAlpha = fBitmapAlpha;
        bmpInfo.params.nrcDest = nrcDest;

        // Get the bitmap dimensions.
        BITMAP bm;
        GetObject(hBitmap, sizeof(BITMAP), &bm);

        // Set the source rectangle equal to the entire bitmap.
        SetRect(&bmpInfo.params.rcSrc, 0, 0, bm.bmWidth, bm.bmHeight);

        // Set the bitmap.
        hr = m_pMixerBitmap->SetAlphaBitmap(&bmpInfo);

        SelectObject(hdcBmp, hOld);
        DeleteDC(hdcBmp);
        ReleaseDC(m_hwndVideo, hdc);
    }
    else
    {
        hr = m_pMixerBitmap->ClearAlphaBitmap();
    }
    return hr;
}

Anforderungen

   
Unterstützte Mindestversion (Client) Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile evr9.h
Bibliothek Strmiids.lib

Weitere Informationen

Erweiterter Videorenderer

IMFVideoMixerBitmap