次の方法で共有


IMFVideoMixerBitmap::SetAlphaBitmap メソッド (evr9.h)

拡張ビデオ レンダラー (EVR) のビットマップ イメージを、ビデオとアルファブレンドするように設定します。

構文

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

パラメーター

[in] pBmpParms

ビットマップ、ソース四角形と変換先の四角形、カラー キー、およびその他の情報に関する情報を含む MFVideoAlphaBitmap 構造体へのポインター。

戻り値

このメソッドは HRESULT を返します。 有効な値を次の表に示しますが、これ以外にもあります。

リターン コード 説明
S_OK
メソッドが成功しました。
E_INVALIDARG
pBmpParms 構造体で定義されているブレンド パラメーターが無効です。

解説

アプリケーションは、GDI ビットマップまたは Direct3D サーフェスとしてイメージを提供できます。 EVR ミキサーは、イメージが変更または削除されるまで、イメージを次のビデオ フレームと後続のすべてのフレームとブレンドします。 画像には、透明領域を定義できるように、埋め込まれたピクセル単位のアルファ情報を含めることができます。 透明領域は、カラー キー値を使用して識別することもできます。

Direct3D サーフェスを使用する場合、サーフェス形式は 32 ビット RGB (D3DFMT_X8R8G8B8またはD3DFMT_A8R8G8B8) である必要があり、サーフェスはD3DPOOL_SYSTEMMEMメモリ プールから割り当てる必要があります。

ビデオ レンダラーに画像を渡す頻度に対する制限は定義されていません。 ただし、1 秒に数回画像を変更すると、ビデオのパフォーマンスと滑らかさに影響を与える可能性があります。

次の使用例は、アルファ ブレンド用の 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
Library Strmiids.lib

関連項目

強化されたビデオ レンダラー

IMFVideoMixerBitmap