Как-то не удобно обращаться с таким вопросом, но все-таки:
Необходимо заполнить битмап зеленым цветом.
HBITMAP SetColor(HDC hdc)
{
HBITMAP bitmap = CreateCompatibleBitmap(hdc,32,32);
BITMAPINFO bi{ 0 };
bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
if (!GetDIBits(hdc, bitmap, 0, 0, NULL, &bi, DIB_RGB_COLORS))
return NULL;
// bi честно заполняется значениями !!!
BYTE *bits = new BYTE[bi.bmiHeader.biSizeImage];
DWORD color = RGB(0,255,0);
for (int i = 0; i < bi.bmiHeader.biWidth * bi.bmiHeader.biHeight; i++) {
memcpy(&bits[i*4], &color, 4);
}
// Вот здесь возникает ошибка ERROR_MOD_NOT_FOUND
int result = SetDIBits(hdc, bitmap, 0, bi.bmiHeader.biHeight,
(LPVOID)bits, (BITMAPINFO*)&bi, DIB_RGB_COLORS);
delete [] bits;
return bitmap;
}
Где-то прочитал использовать SelectObject(hdc, bitmap), безрезульнатно.
Такие простые неполадки порой просто выбешивают!!!
Спасибо.
Здравствуйте, Vladimir, Вы писали:
V>Как-то не удобно обращаться с таким вопросом, но все-таки:
V>Необходимо заполнить битмап зеленым цветом.
А если так:
HBITMAP SetColor(HDC hdc)
{
HBITMAP bitmap = CreateCompatibleBitmap(hdc,32,32);
BITMAPINFO bi[1]={};
bi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
if (!GetDIBits(hdc, bitmap, 0, 0, NULL, bi, DIB_RGB_COLORS))
return NULL;
bi->bmiHeader.biBitCount = 32;
bi->bmiHeader.biCompression = BI_RGB;
bi->bmiHeader.biHeight = abs(bi->bmiHeader.biHeight);
if (!GetDIBits(hdc, bitmap, 0, 0, NULL, bi, DIB_RGB_COLORS))
return NULL;
BYTE *bits = new BYTE[bi->bmiHeader.biSizeImage];
DWORD color = RGB(0,255,0);
for (int i = 0; i < bi->bmiHeader.biWidth * bi->bmiHeader.biHeight; i++) {
memcpy(&bits[i*4], &color, 4);
}
int result = SetDIBits(hdc, bitmap, 0, bi.bmiHeader.biHeight,
(LPVOID)bits, bi, DIB_RGB_COLORS);
delete [] bits;
return bitmap;
}
вроде как bi надо заполнять
даже если используется GetDIBits
трекните все ли нужные поля выставляются самой функцией после того как ее вызвали
т.е. она возвращает
должны быть корректные
bi.biWidth
bi.biHeight
bi.biPlanes
bi.biBitCount
bi.biCompression
дальше перед отдачей в SetDIBits
надо все таки ставить
bi.bmiHeader.biCompression = BI_RGB;
https://www.codeproject.com/Articles/14052/Image-Processing-Using-GDI