Pages

Tuesday, October 6, 2009

3 способа создать HBITMAP средствами Win32 API

1. Самый легкий - CreateCompatibleBitmap:
HDC hDC = ::GetDC(m_hWnd);
HDC hMemDC = ::CreateCompatibleDC(hDC);
HBITMAP hBitmap = CreateCompatibleBitmap(hDC, 256, 256);

2. Самый лучший - CreateDIBSection:
HDC hDC = ::GetDC(m_hWnd);
HDC hMemDC = ::CreateCompatibleDC(hDC);

BITMAPINFO bmi = { 0 };
LPBYTE pBits = NULL;

bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = 256;
bmi.bmiHeader.biHeight = 256;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biCompression = BI_RGB;

HBITMAP hBitmap = ::CreateDIBSection(hDC, &bmi, DIB_RGB_COLORS,(void **)&pBits, NULL, 0);

3. Самый безполезный - CreateDIBitmap:
HDC hDC = ::GetDC(m_hWnd);
HDC hMemDC = ::CreateCompatibleDC(hDC);

BITMAPINFO bmi = { 0 };
m_pBits = (LPBYTE)malloc( 256 * 256 * 24);
ZeroMemory(m_pBits, 256 * 256 * 24);

bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = 256;
bmi.bmiHeader.biHeight = 256;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biCompression = BI_RGB;

HBITMAP hBitmap = CreateDIBitmap(hDC, &(bmi.bmiHeader), CBM_INIT, m_pBits, &bmi, DIB_RGB_COLORS);

No comments:

Post a Comment