在我的應用程序中,我需要創建HBITMAP對象,並將其呈現給我,並從中複製結果。沒有窗口的Win32設備上下文
我使用函數「CreateDIBSection」來創建這些位圖,但是此函數需要DC(設備上下文)作爲第一個參數。目前我通過調用主窗口句柄(hWnd)上的GetDC(hWnd)來獲得此信息。但我希望能夠創建HBITMAPS而不需要具有應用程序窗口,沒有某種內存DC,這可能嗎?
在我的應用程序中,我需要創建HBITMAP對象,並將其呈現給我,並從中複製結果。沒有窗口的Win32設備上下文
我使用函數「CreateDIBSection」來創建這些位圖,但是此函數需要DC(設備上下文)作爲第一個參數。目前我通過調用主窗口句柄(hWnd)上的GetDC(hWnd)來獲得此信息。但我希望能夠創建HBITMAPS而不需要具有應用程序窗口,沒有某種內存DC,這可能嗎?
CreateCompatibleDC(NULL)
將創建一個與屏幕兼容的設備環境 - 這聽起來像在這種情況下是理想的。
你可以得到一個帶有的CreateDC用於顯示:
HDC hDc = CreateDC(L"DISPLAY", NULL, NULL, NULL);
清理與DeleteDC()。它僅用於初始化帶索引格式的位圖的調色板。如果你不使用這樣的格式,NULL可能會工作,從來沒有嘗試過。
然後有GDI +,#include <gdiplus.h>
和Bitmap類...
嘗試。有效。
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);
如果用戶有多個顯示屏,會中斷嗎? – 2010-08-01 14:43:16
只能影響調色板。還沒有看到可以長時間運行在8bpp模式下的視頻適配器。甩掉包袱。 – 2010-08-01 15:26:08