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 |
---|---|
|
El método se ha llevado a cabo de forma correcta. |
|
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 |