繁体   English   中英

在C ++控制台应用程序中编写位图

[英]writing Bitmap within a c++ console application

我正在尝试在MFC DLL中创建一个位图,我正在写

CDC *pDC = GetDC();
CDC memDC ;
memDC.CreateCompatibleDC(pDC);
CBitmap newbmp;
newbmp.CreateCompatibleBitmap(pDC, 300, 300);
ReleaseDC(pDC);
CBitmap *pOldBitmap = memDC.SelectObject(&newbmp); 
memDC.FillSolidRect(0,0,300,300,RGB(255,255,255));
CBrush brush;
CBrush *pOldBrush = memDC.SelectObject(&brush);
memDC.Rectangle(10, 10, 80, 80);
memDC.Ellipse(60,60,220,220);
memDC.SelectObject(pOldBrush);
memDC.SelectObject(pOldBitmap);
CImage img;
img.Attach((HBITMAP)newbmp.Detach());
img.Save(_T("C:\\atest.bmp"),Gdiplus::ImageFormatBMP);

尽管这可以在Cwindows应用程序中正常运行,但我无法使其在控制台应用程序中正常工作,如何在控制台应用程序中获取Device conext? 我无法让getDC工作

在调用GetDC()之前,必须具有CWnd的句柄或指针。但是在控制台应用程序中,不能调用此函数。

这对我有用:

    CDC *pDC;
    pDC = CDC::FromHandle(::GetDC(NULL));

    CDC memDC;
    memDC.CreateCompatibleDC(pDC);

    CBitmap newbmp;
    newbmp.CreateCompatibleBitmap(pDC, 300, 300);
    CBitmap *pOldBitmap = memDC.SelectObject(&newbmp); 

    memDC.FillSolidRect(0,0,300,300,RGB(255,255,255));
    CBrush brush;
    CBrush *pOldBrush = memDC.SelectObject(&brush);
    memDC.Rectangle(10, 10, 80, 80);
    memDC.Ellipse(60,60,220,220);
    memDC.SelectObject(pOldBrush);
    memDC.SelectObject(pOldBitmap);

    CImage img;
    img.Attach((HBITMAP)newbmp.Detach());
    img.Save(_T("C:\\atest.bmp"),Gdiplus::ImageFormatBMP);

    ::ReleaseDC(    NULL,
                    *pDC);
    ::ReleaseDC(    NULL,
                    memDC);

当然,要使用CDC和CBitmap,您需要使用MFC作为共享DLL,并向stdafx.h添加一些标头:

#include <afxwin.h>
#include <atlimage.h>

希望能帮助到你,

哈维尔

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM