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

Establece una imagen de mapa de bits para el representador de vídeo mejorado (EVR) en combinación alfa con el vídeo.

Sintaxis

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

Parámetros

[in] pBmpParms

Puntero a una estructura MFVideoAlphaBitmap que contiene información sobre el mapa de bits, los rectángulos de origen y destino, la clave de color y otra información.

Valor devuelto

El método devuelve un valor HRESULT. Entre los valores posibles se incluyen los que se indican en la tabla siguiente, entre otros.

Código devuelto Descripción
S_OK
El método se ha llevado a cabo de forma correcta.
E_INVALIDARG
Los parámetros de fusión definidos en la estructura pBmpParms no son válidos.

Comentarios

La aplicación puede proporcionar la imagen como un mapa de bits GDI o como una superficie de Direct3D. El mezclador EVR combina la imagen con el siguiente fotograma de vídeo y todos los fotogramas posteriores, hasta que se cambie o quite la imagen. La imagen puede contener información alfa incrustada por píxel para que se puedan definir regiones transparentes. Las áreas transparentes también se pueden identificar mediante un valor de clave de color.

Si usas una superficie Direct3D, el formato de superficie debe ser RGB de 32 bits, ya sea D3DFMT_X8R8G8B8 o D3DFMT_A8R8G8B8, y la superficie debe asignarse desde el grupo de memoria de D3DPOOL_SYSTEMMEM.

No hay ningún límite definido para la frecuencia con la que se pueden pasar imágenes al representador de vídeo. Sin embargo, cambiar la imagen varias veces por segundo puede afectar al rendimiento y la suavidad del vídeo.

Ejemplos

En el ejemplo siguiente se establece un mapa de bits GDI para la combinación alfa. Para los fines del ejemplo, usa la configuración predefinida para el rectángulo de destino y el valor 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;
}

Requisitos

   
Cliente mínimo compatible Windows Vista [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado evr9.h
Library Strmiids.lib

Consulte también

Representador de vídeo mejorado

IMFVideoMixerBitmap