IMFVideoMixerBitmap::SetAlphaBitmap 方法 (evr9.h)
为增强的视频呈现器设置位图图像, (EVR) 以 alpha 与视频混合。
语法
HRESULT SetAlphaBitmap(
[in] const MFVideoAlphaBitmap *pBmpParms
);
参数
[in] pBmpParms
指向 MFVideoAlphaBitmap 结构的指针,该结构包含有关位图、源矩形和目标矩形、颜色键和其他信息的信息。
返回值
该方法返回 HRESULT。 可能的值包括(但并不限于)下表中的项。
返回代码 | 说明 |
---|---|
|
方法成功。 |
|
pBmpParms 结构中定义的混合参数无效。 |
备注
应用程序可以提供图像作为 GDI 位图或 Direct3D 图面。 EVR 混音器将图像与下一个视频帧和所有后续帧混合,直到图像发生更改或删除。 图像可以包含嵌入的每像素 alpha 信息,以便可以定义透明区域。 还可以使用颜色键值来标识透明区域。
如果使用 Direct3D 图面,则图面格式必须为 32 位 RGB(D3DFMT_X8R8G8B8或D3DFMT_A8R8G8B8),并且表面必须从D3DPOOL_SYSTEMMEM内存池中分配。
将图像传递到视频呈现器的频率没有定义限制。 但是,每秒更改图像几次可能会影响视频的性能和流畅性。
示例
以下示例设置用于 alpha 混合的 GDI 位图。 就本示例而言,它使用目标矩形和 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;
}
要求
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 [仅限桌面应用] |
目标平台 | Windows |
标头 | evr9.h |
Library | Strmiids.lib |