Контекст устройства Win32 без окна - PullRequest
3 голосов
/ 01 августа 2010

В моем приложении мне нужно создать объекты HBITMAP, в которые я отрисовываю и откуда копирую результат.

Я использую функцию «CreateDIBSection» для создания этих растровых изображений, однако эта функция требует DC (Device Context) в качестве первого параметра.В настоящее время я получаю это, вызывая GetDC (hWnd) на дескрипторе главного окна (hWnd).Но я хотел бы иметь возможность создавать HBITMAPS без необходимости иметь окно приложения, без какой-либо памяти в DC. Это возможно?

Ответы [ 3 ]

2 голосов
/ 01 августа 2010

Вы можете получить один с CreateDC для отображения:

 HDC hDc = CreateDC(L"DISPLAY", NULL, NULL, NULL);

Очистить с помощью DeleteDC ().Он используется только для инициализации палитры для растровых изображений с индексированным форматом.NULL может работать, если вы не используете такой формат, никогда не пробовал его.

Тогда есть GDI +, #include <gdiplus.h> и класс Bitmap ...

2 голосов
/ 01 августа 2010

CreateCompatibleDC(NULL) создаст вам контекст устройства, совместимый с экраном, который звучит так, как будто он идеально подходит в данной ситуации.

0 голосов
/ 20 марта 2014

попробуйте это. это сработало.

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 ); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...