Метод IMFVideoMixerBitmap::SetAlphaBitmap (evr9.h)
Задает растровое изображение для расширенного отрисовщика видео (EVR) для альфа-смешивания с видео.
Синтаксис
HRESULT SetAlphaBitmap(
[in] const MFVideoAlphaBitmap *pBmpParms
);
Параметры
[in] pBmpParms
Указатель на структуру MFVideoAlphaBitmap , содержащую сведения о растровом рисунке, исходном и целевом прямоугольниках, цветовом ключе и других данных.
Возвращаемое значение
Метод возвращает HRESULT. Допустимые значения включают, но не ограничиваются, значения, приведенные в следующей таблице.
Код возврата | Описание |
---|---|
|
Метод выполнен успешно. |
|
Параметры смешения, определенные в структуре pBmpParms , недопустимы. |
Комментарии
Приложение может предоставить изображение в виде точечного изображения GDI или в виде поверхности Direct3D. Микшер EVR смешивает изображение со следующим видеокадром и всеми последующими кадрами, пока изображение не будет изменено или удалено. Изображение может содержать внедренные для каждого пикселя альфа-данные, чтобы можно было определить прозрачные области. Прозрачные области также можно определить с помощью значения ключа цвета.
Если вы используете поверхность Direct3D, surface должен иметь 32-разрядный формат RGB, D3DFMT_X8R8G8B8 или D3DFMT_A8R8G8B8, а поверхность должна быть выделена из пула памяти D3DPOOL_SYSTEMMEM.
Нет определенного ограничения на частоту передачи изображений в отрисовщик видео. Однако изменение изображения несколько раз в секунду может повлиять на производительность и плавность видео.
Примеры
В следующем примере задается точечное изображение GDI для альфа-смешивания. В этом примере используются предопределенные параметры для целевого прямоугольника и альфа-значения.
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 |
Header | evr9.h |
Библиотека | Strmiids.lib |