美文网首页
在VMR-9的预览中叠加GDI的绘制

在VMR-9的预览中叠加GDI的绘制

作者: 叶迎宪 | 来源:发表于2018-08-26 15:19 被阅读0次

DShow采集如何与VMR-9预览结合起来参考上一篇文章。要在VMR-9预览上叠加GDI的绘图,需要自己创建一个BITMAP,把东西在BITMAP上都画好了,再使用IVMRMixerBitmap9::SetAlphaBitmap叠加上去

    hr = m_pVmrWc->QueryInterface(IID_IVMRMixerBitmap9, (LPVOID *)&m_pBmp);
......

HRESULT CDShowDevStream::DrawLine()
{
    HWND hwnd;
    HDC dc, dcMem;
    RECT rc;
    HBITMAP bmpMem;
    HGDIOBJ bmpOld;

    hwnd = (HWND)param_.window.info.win.hwnd;

    dc = ::GetDC(hwnd);
    dcMem = ::CreateCompatibleDC(dc);

    ::GetClientRect(hwnd, &rc);

    bmpMem = ::CreateCompatibleBitmap(dc, rc.right, rc.bottom);
    bmpOld = ::SelectObject(dcMem, bmpMem);

    // Draw a line on bitmap
    HPEN pen = CreatePen(PS_SOLID, 1, RGB(255, 255, 255));
    HPEN oldPen = (HPEN)SelectObject(dcMem, pen);

    MoveToEx(dcMem, 0, 0, NULL);
    LineTo(dcMem, 100, 150);
    SelectObject(dcMem, oldPen);
    DeleteObject(pen);

    VMR9AlphaBitmap bmpInfo;
    ZeroMemory(&bmpInfo, sizeof(bmpInfo));
    bmpInfo.dwFlags = VMRBITMAP_HDC;
    bmpInfo.hdc = dcMem;

    // Show the entire bitmap in the video image.
    SetRect(&bmpInfo.rSrc, 0, 0, rc.right, rc.bottom);
    // rDest specifies the destination rectangle in composition space (0.0f to 1.0f)
    bmpInfo.rDest.left = 0.f;
    bmpInfo.rDest.top = 0.f;
    bmpInfo.rDest.right = 1.0f;
    bmpInfo.rDest.bottom = 1.0f;

    // Set the COLORREF so that the bitmap outline will be transparent
    bmpInfo.dwFlags |= VMRBITMAP_SRCCOLORKEY;
    bmpInfo.clrSrcKey = RGB(0, 0, 0);

    // Set the transparency value (1.0 is opaque, 0.0 is transparent).
    bmpInfo.fAlpha = 1.0f;

    HRESULT hr = m_pBmp->SetAlphaBitmap(&bmpInfo);

    // Cleanup.
    ::SelectObject(dcMem, bmpOld);
    ::DeleteObject(bmpMem);
    ::DeleteDC(dcMem);
    ReleaseDC(hwnd, dc);

    return hr;
}

参考
https://msdn.microsoft.com/en-us/library/windows/desktop/dd375479(v=vs.85).aspx
https://stackoverflow.com/questions/3015307/trying-to-make-vmr-9-mixerbitmap-gdi-work
https://www.codeproject.com/Articles/15531/Showing-an-animated-image-over-running-video

相关文章

  • 在VMR-9的预览中叠加GDI的绘制

    DShow采集如何与VMR-9预览结合起来参考上一篇文章。要在VMR-9预览上叠加GDI的绘图,需要自己创建一个B...

  • windows-c++ 头像以圆形显示

    GDI+ 在WM_PAINT消息处理中绘制 PAINTSTRUCT ps; H...

  • 10-9学习总结

    今天学习了图形的绘制: 1.图形设备接口(GDI) 图形设备接口GDI (Graphics Device Inte...

  • 如何在DShow采集中使用VMR-9做预览

    DShow默认的预览窗口(IVideoWindow)对绘制的控制太弱了,想自己在上面叠加文字线条什么的几乎不可能。...

  • 2018-10-15

    绘制折线图,折线叠加图,柱状叠加图。

  • 第86天 扎克-动画小蓝车03

    造树——挤压 在材质预览模式下,添加材质。 一、制作间隙 选择需要制作间隙的边,V——分割,(在视图叠加层中,取消...

  • 关于ConstraintLayout

    刚更新了Android Studio2.3.3,布局时发现预览中OK的视图,在模拟器中所有view都叠加在...

  • 2017 10 09

    图形的绘制 1.图形设备接口GDI (Graphics Device Interface ):为一个可执行程序,它...

  • 【Canvas】使用Vue3+TS+Canvas实现星星连线

    1.效果预览 2.实现思路 1.绘制一颗星星,让这颗星星在画布中运动2.在画布中绘制一组星星,每颗星星都在画布中运...

  • 在日子的叠加中

    坐在床上边,喝着茶水,抱着书,好悠闲自在的午后。 电话响了。大夫的,“嗨,在家吗?” “哦,咋?有事儿?” “小七...

网友评论

      本文标题:在VMR-9的预览中叠加GDI的绘制

      本文链接:https://www.haomeiwen.com/subject/fzsoiftx.html