Share via


Metodo IMFVideoMixerBitmap::SetAlphaBitmap (evr9.h)

Imposta un'immagine bitmap per il renderer video avanzato (EVR) su alfa-blend con il video.

Sintassi

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

Parametri

[in] pBmpParms

Puntatore a una struttura MFVideoAlphaBitmap che contiene informazioni sulla bitmap, sui rettangoli di origine e di destinazione, sulla chiave di colore e su altre informazioni.

Valore restituito

Il metodo restituisce un valore HRESULT. I valori possibili includono, ma non sono limitati a, quelli indicati nella tabella seguente.

Codice restituito Descrizione
S_OK
Il metodo è riuscito.
E_INVALIDARG
I parametri di fusione definiti nella struttura pBmpParms non sono validi.

Commenti

L'applicazione può fornire l'immagine come bitmap GDI o come superficie Direct3D. Il mixer EVR combina l'immagine con il fotogramma video successivo e tutti i fotogrammi successivi, fino a quando l'immagine non viene modificata o rimossa. L'immagine può contenere informazioni alfa per pixel incorporate in modo che sia possibile definire aree trasparenti. Le aree trasparenti possono essere identificate anche usando un valore di chiave colore.

Se si usa una superficie Direct3D, il formato della superficie deve essere RGB a 32 bit, D3DFMT_X8R8G8B8 o D3DFMT_A8R8G8B8 e la superficie deve essere allocata dal pool di memoria D3DPOOL_SYSTEMMEM.

Non esiste alcun limite definito alla frequenza con cui è possibile passare le immagini al renderer video. Tuttavia, la modifica dell'immagine più volte al secondo può influire sulle prestazioni e sulla fluidità del video.

Esempio

Nell'esempio seguente viene impostata una bitmap GDI per la fusione alfa. Ai fini dell'esempio, usa le impostazioni predefinite per il rettangolo di destinazione e il valore alfa.

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

Requisiti

   
Client minimo supportato Windows Vista [solo app desktop]
Server minimo supportato Windows Server 2008 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione evr9.h
Libreria Strmiids.lib

Vedi anche

Renderer video avanzato

IMFVideoMixerBitmap