【问题标题】:How to get the "screen image" to a CImage to save it?如何将“屏幕图像”获取到 CImage 以保存它?
【发布时间】:2013-01-09 21:14:48
【问题描述】:

如何从CPaintDC图像(屏幕)到Cimage?

CPaintDC dc(this);

dc.FillSolidRect( 20-1, 200+1, 200*3, 400+2, (COLORREF) 0x0 );

dc.SelectObject(pen1);

dc.MoveTo(20,400);
for(int i = 0;i<200;i++)
{
     dc.LineTo(20 + x[i], 600 - y1[i]);
     dc.FillSolidRect( 20 + x[i]-1,600- y1[i]-1, 3, 3, (COLORREF) 0xff00 );
}

(以下内容会输出一条警告消息,说明它触发了关于“dbgrptt.c - 调试 CRT 报告函数”的断点???所以我一定是错过了或做错了什么?

CImage myimage;

    myimage.GetDC();
    myimage.Save("C:\\Projects_example\\sweep.jpg");
    myimage.ReleaseDC();

【问题讨论】:

    标签: mfc visual-c++-2005


    【解决方案1】:
    CRect rc;
    GetClientRect(rc);
    CImage myimage;
    myimage.Create(rc.Width(), rc.Height(), 24);
    CDC memdc;
    memdc.CreateCompatibleDC(&dc);
    CBitmap * pOldBitmap = memdc.SelectObject(CBitmap::FromHandle((HBITMAP)myimage));
    memdc.BitBlt(0, 0, rc.Width(), rc.Height(), &dc, 0, 0, SRCCOPY);
    memdc.SelectObject(pOldBitmap);
    

    此时,您的myimage 对象应该拥有在dc 上绘制的内容的副本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      相关资源
      最近更新 更多