Я пользуюсь библиотекой EasyBMP для работы с BMP'шными картинками, но это только для сведения. Вот мой код внутри обработчика WM_PAINT:
| Код | BeginPaint(hwnd, &ps); SelectObject(ps.hdc, hbmpCompat); for (int i = 0; i < w; i++) { for(int j = 0; j < h; j++){ SetPixel(ps.hdc, i, j, RGB(bmp(i, j)->Red, bmp(i, j)->Green, bmp(i, j)->Blue)); } }
EndPaint(hwnd, &ps);
|
Он работает и выводит все цвета, которые присутствуют на BMP картинке. Естественно очень не эффективно каждый раз при поступлении по новой выводить рисунок. Поэтому я решил поступить так:
| Код | WM_CREATE: [...] hdc = GetDC(hwnd); bmp.ReadFromFile("./sample2.bmp"); w = bmp.TellWidth(); h = bmp.TellHeight(); hdcCompat = CreateCompatibleDC(hdc); hbmpCompat = CreateCompatibleBitmap(hdcCompat, w, h); SelectObject(hdcCompat, hbmpCompat);
for (int i = 0; i < w; i++) { for(int j = 0; j < h; j++){ SetPixel(hdcCompat, i, j, RGB(bmp(i, j)->Red, bmp(i, j)->Green, bmp(i, j)->Blue)); } } ReleaseDC(hwnd, hdc); [...]
WM_PAINT: BeginPaint(hwnd, &ps); SelectObject(ps.hdc, hbmpCompat); BitBlt(ps.hdc, 0 ,0 , w, h, hdcCompat, 0, 0, SRCCOPY); EndPaint(hwnd, &ps); break;
|
В результате чего у меня выводятся только черные пиксели, все остальные заменяются на белые. Кто знает, в чем тут дело? |