IMFVideoMixerBitmap::SetAlphaBitmap-Methode (evr9.h)
Legt ein Bitmapbild für den erweiterten Videorenderer (EVR) fest, um eine Alpha-Blendung mit dem Video zu erstellen.
Syntax
HRESULT SetAlphaBitmap(
[in] const MFVideoAlphaBitmap *pBmpParms
);
Parameter
[in] pBmpParms
Zeiger auf eine MFVideoAlphaBitmap-Struktur , die Informationen zur Bitmap, den Quell- und Zielrechtecken, dem Farbschlüssel und anderen Informationen enthält.
Rückgabewert
Die Methode gibt ein HRESULT zurück. Mögliches Werte (aber nicht die Einzigen) sind die in der folgenden Tabelle.
Rückgabecode | BESCHREIBUNG |
---|---|
|
Die Methode wurde erfolgreich ausgeführt. |
|
Die in der pBmpParms-Struktur definierten Füllparameter sind ungültig. |
Bemerkungen
Die Anwendung kann das Bild entweder als GDI-Bitmap oder als Direct3D-Oberfläche bereitstellen. Der EVR-Mixer mischt das Bild mit dem nächsten Videorahmen und allen nachfolgenden Frames, bis das Bild geändert oder entfernt wird. Das Bild kann eingebettete Alphainformationen pro Pixel enthalten, sodass transparente Regionen definiert werden können. Transparente Bereiche können auch mithilfe eines Farbschlüsselwerts identifiziert werden.
Wenn Sie eine Direct3D-Oberfläche verwenden, muss das Oberflächenformat 32-Bit-RGB sein, entweder D3DFMT_X8R8G8B8 oder D3DFMT_A8R8G8B8, und die Oberfläche muss aus dem D3DPOOL_SYSTEMMEM Speicherpool zugeordnet werden.
Es gibt keine definierte Beschränkung für die Häufigkeit der Übergabe von Bildern an den Videorenderer. Ein mehrmalses Ändern des Bilds pro Sekunde kann sich jedoch auf die Leistung und Glätte des Videos auswirken.
Beispiele
Im folgenden Beispiel wird eine GDI-Bitmap für die Alphamischung festgelegt. Für die Zwecke des Beispiels werden vordefinierte Einstellungen für das Zielrechteck und den Alphawert verwendet.
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;
}
Anforderungen
Unterstützte Mindestversion (Client) | Windows Vista [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2008 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | evr9.h |
Bibliothek | Strmiids.lib |