다음을 통해 공유


IMFVideoMixerBitmap::SetAlphaBitmap 메서드(evr9.h)

향상된 EVR(비디오 렌더러)에 대한 비트맵 이미지를 설정하여 비디오와 알파 혼합합니다.

구문

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

매개 변수

[in] pBmpParms

비트맵, 원본 및 대상 사각형, 색 키 및 기타 정보에 대한 정보를 포함하는 MFVideoAlphaBitmap 구조체에 대한 포인터입니다.

반환 값

이 메서드는 HRESULT를 반환합니다. 가능한 값에는 다음 표에 있는 값이 포함되지만, 이에 국한되는 것은 아닙니다.

반환 코드 설명
S_OK
메서드가 성공했습니다.
E_INVALIDARG
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

추가 정보

향상된 비디오 렌더러

IMFVideoMixerBitmap