METODE IMFVideoMixerBitmap::SetAlphaBitmap (evr9.h)

Mengatur gambar bitmap untuk perender video (EVR) yang disempurnakan ke alpha-blend dengan video.

Sintaks

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

Parameter

[in] pBmpParms

Arahkan ke struktur MFVideoAlphaBitmap yang berisi informasi tentang bitmap, persegi panjang sumber dan tujuan, kunci warna, dan informasi lainnya.

Mengembalikan nilai

Metode mengembalikan HRESULT. Nilai yang mungkin termasuk, tetapi tidak terbatas pada, yang ada dalam tabel berikut.

Menampilkan kode Deskripsi
S_OK
Metode berhasil.
E_INVALIDARG
Parameter blending yang ditentukan dalam struktur pBmpParms tidak valid.

Keterangan

Aplikasi ini dapat menyediakan gambar baik sebagai bitmap GDI atau sebagai permukaan Direct3D. Mixer EVR memadukan gambar dengan bingkai video berikutnya dan semua bingkai berikutnya, hingga gambar diubah atau dihapus. Gambar dapat berisi informasi alfa per piksel yang disematkan sehingga wilayah transparan dapat ditentukan. Area transparan juga dapat diidentifikasi menggunakan nilai kunci warna.

Jika Anda menggunakan permukaan Direct3D, format permukaan harus RGB 32-bit, baik D3DFMT_X8R8G8B8 atau D3DFMT_A8R8G8B8, dan permukaan harus dialokasikan dari kumpulan memori D3DPOOL_SYSTEMMEM.

Tidak ada batasan yang ditentukan untuk seberapa sering Anda dapat meneruskan gambar ke perender video. Namun, mengubah gambar beberapa kali per detik dapat memengaruhi performa dan kelancaran video.

Contoh

Contoh berikut menetapkan bitmap GDI untuk perpaduan alfa. Untuk tujuan contoh, ia menggunakan pengaturan yang telah ditentukan sebelumnya untuk persegi panjang tujuan dan nilai alfa.

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;
}

Persyaratan

   
Klien minimum yang didukung Windows Vista [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2008 [hanya aplikasi desktop]
Target Platform Windows
Header evr9.h
Pustaka Strmiids.lib

Lihat juga

Perender Video yang Disempurnakan

IMFVideoMixerBitmap