在我的应用程序中,我需要创建我渲染的HBITMAP对象以及从中复制结果的位置。
我使用函数“CreateDIBSection”来创建这些位图,但是此函数需要DC(设备上下文)作为第一个参数。目前我通过在主窗口句柄(hWnd)上调用GetDC(hWnd)来实现此目的。但是我希望能够创建HBITMAPS而不需要有一个应用程序窗口,没有某种内存DC,这可能吗?
答案 0 :(得分:2)
CreateCompatibleDC(NULL)
会为您创建一个与屏幕兼容的设备上下文 - 这听起来就像在这种情况下一样理想。
答案 1 :(得分:2)
您可以使用CreateDC获取显示屏:
HDC hDc = CreateDC(L"DISPLAY", NULL, NULL, NULL);
使用DeleteDC()进行清理。它仅用于初始化具有索引格式的位图调色板。如果您不使用这种格式,NULL可能会起作用,从未尝试过。
然后是GDI +,#include <gdiplus.h>
和Bitmap类......
答案 2 :(得分:0)
试试这个。它奏效了。
HDC hdcScreen = ::GetDC( NULL );
HDC hdcMemDC = ::CreateCompatibleDC(hdcScreen);
HBITMAP hbmScreen = ::CreateCompatibleBitmap(hdcScreen, cx, cy);
HBITMAP hOldBitmap = (HBITMAP) ::SelectObject(hdcMemDC, hbmScreen);
MyImageDraw(hdcMemDC, ...);
// The drawing image is held in hBitmap. You can save it
HBITMAP hBitmap = (HBITMAP)::SelectObject(hdcMemDC, hOldBitmap);
// save The trend image into c:\test.bmp
PBITMAPINFO pbi = CreateBitmapInfoStruct(hBitmap);
CreateBMPFile("C:\\Temp\\test.bmp", pbi, hBitmap, hdcMemDC);
//Clean up
::DeleteObject(hbmScreen);
::DeleteObject(hdcMemDC);
::ReleaseDC( NULL, hdcScreen );