Поделиться через


Метод IMFVideoMixerBitmap::SetAlphaBitmap (evr9.h)

Задает растровое изображение для расширенного отрисовщика видео (EVR) для альфа-смешивания с видео.

Синтаксис

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

Параметры

[in] pBmpParms

Указатель на структуру MFVideoAlphaBitmap , содержащую сведения о растровом рисунке, исходном и целевом прямоугольниках, цветовом ключе и других данных.

Возвращаемое значение

Метод возвращает HRESULT. Допустимые значения включают, но не ограничиваются, значения, приведенные в следующей таблице.

Код возврата Описание
S_OK
Метод выполнен успешно.
E_INVALIDARG
Параметры смешения, определенные в структуре 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

См. также раздел

Расширенный отрисовщик видео

IMFVideoMixerBitmap