在解码生成AVI时,如何在生成的AVI画面上添加文字内存中有解码后的DIB数据。

解决方案 »

  1.   

    我已经解决了,现共享代码 void *pVideoOut = m_VideoOut;   //DIB数据存储区 HDC hWndDC=::GetDC(myhWnd);
    HDC hMemDC=CreateCompatibleDC(hWndDC);

    hMemBmp = CreateDIBSection(hWndDC, &m_BmpU, 0,&pVideoOut, NULL, 0 );
    HBITMAP hOldBmp = (HBITMAP)SelectObject(hMemDC,hMemBmp); RECT rc;
    ::GetClientRect(myhWnd,&rc);
    if(hOldBmp)
    {
    BITMAPINFOHEADER* pbih=&m_BmpU.bmiHeader; HDRAWDIB h=DrawDibOpen();
    DrawDibDraw(h,hMemDC,0,0,rc.right,rc.bottom,pbih,pVideoOut,0,0,pbih->biWidth,pbih->biHeight,DDF_NOTKEYFRAME);
    DrawDibClose(h); SetBkMode(hMemDC,TRANSPARENT);
    SetTextColor(hMemDC,RGB(150,255,0));
    DrawText(hMemDC,csTimer,-1,&rc,DT_LEFT);   //添加字符上去
    if(!bBMP2AVI)
    BitBlt(hWndDC,0,0,rc.right,rc.bottom,hMemDC,0,0,SRCCOPY);
    hMemBmp =(HBITMAP)SelectObject(hMemDC,hOldBmp);   //得到结果图片
    GetObject(hMemBmp,sizeof(dibs),&dibs);    //得到输出的DIB数据
    }
    DeleteDC(hMemDC);
    ::ReleaseDC(myhWnd,hWndDC);

    if(!::IsWindowVisible(m_hWnd))
    ::ShowWindow(m_hWnd,SW_SHOW);