Partager via


Méthode IMFVideoMixerBitmap::SetAlphaBitmap (evr9.h)

Définit une image bitmap pour le convertisseur vidéo amélioré (EVR) pour qu’il soit alpha-blend avec la vidéo.

Syntaxe

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

Paramètres

[in] pBmpParms

Pointeur vers une structure MFVideoAlphaBitmap qui contient des informations sur la bitmap, les rectangles source et de destination, la clé de couleur et d’autres informations.

Valeur retournée

Cette méthode retourne un code HRESULT. Les valeurs possibles sont notamment celles figurant dans le tableau suivant.

Code de retour Description
S_OK
S_OK
E_INVALIDARG
Les paramètres de fusion définis dans la structure pBmpParms ne sont pas valides.

Notes

L’application peut fournir l’image sous la forme d’une bitmap GDI ou d’une surface Direct3D. Le mélangeur EVR fusionne l’image avec l’image vidéo suivante et toutes les images suivantes, jusqu’à ce que l’image soit modifiée ou supprimée. L’image peut contenir des informations alpha incorporées par pixel afin que des régions transparentes puissent être définies. Les zones transparentes peuvent également être identifiées à l’aide d’une valeur de clé de couleur.

Si vous utilisez une surface Direct3D, le format de surface doit être RVB 32 bits, D3DFMT_X8R8G8B8 ou D3DFMT_A8R8G8B8, et la surface doit être allouée à partir du pool de mémoire D3DPOOL_SYSTEMMEM.

Il n’existe aucune limite définie à la fréquence à laquelle vous pouvez passer des images au convertisseur vidéo. Toutefois, la modification de l’image plusieurs fois par seconde peut avoir un impact sur les performances et la fluidité de la vidéo.

Exemples

L’exemple suivant définit une bitmap GDI pour la fusion alpha. Pour les besoins de l’exemple, il utilise des paramètres prédéfinis pour le rectangle de destination et la valeur alpha.

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

Spécifications

   
Client minimal pris en charge Windows Vista [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2008 [applications de bureau uniquement]
Plateforme cible Windows
En-tête evr9.h
Bibliothèque Strmiids.lib

Voir aussi

Convertisseur vidéo amélioré

IMFVideoMixerBitmap