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 |
---|---|
|
Metode berhasil. |
|
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 |