IMFVideoMixerBitmap::SetAlphaBitmap 메서드(evr9.h)
향상된 EVR(비디오 렌더러)에 대한 비트맵 이미지를 설정하여 비디오와 알파 혼합합니다.
구문
HRESULT SetAlphaBitmap(
[in] const MFVideoAlphaBitmap *pBmpParms
);
매개 변수
[in] pBmpParms
비트맵, 원본 및 대상 사각형, 색 키 및 기타 정보에 대한 정보를 포함하는 MFVideoAlphaBitmap 구조체에 대한 포인터입니다.
반환 값
이 메서드는 HRESULT를 반환합니다. 가능한 값에는 다음 표에 있는 값이 포함되지만, 이에 국한되는 것은 아닙니다.
반환 코드 | 설명 |
---|---|
|
메서드가 성공했습니다. |
|
pBmpParms 구조에 정의된 혼합 매개 변수가 잘못되었습니다. |
설명
애플리케이션은 이미지를 GDI 비트맵 또는 Direct3D 표면으로 제공할 수 있습니다. EVR 믹서는 이미지가 변경되거나 제거될 때까지 이미지를 다음 비디오 프레임 및 모든 후속 프레임과 혼합합니다. 투명 영역을 정의할 수 있도록 이미지에 포함된 픽셀당 알파 정보가 포함될 수 있습니다. 색 키 값을 사용하여 투명 영역을 식별할 수도 있습니다.
Direct3D 표면을 사용하는 경우 표면 형식은 D3DFMT_X8R8G8B8 또는 D3DFMT_A8R8G8B8 32비트 RGB여야 하며 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 |
헤더 | evr9.h |
라이브러리 | Strmiids.lib |