Здравствуйте, Vaynamond, Вы писали:
V>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>Здравствуйте, Vaynamond, Вы писали:
V>>>8 bpp
V>>>Картинка в градациях серого.
PD>>Тогда надо палитру настроить
PD>> RGBQUAD bmiColors[1];
PD>>https://docs.microsoft.com/en-us/windows/desktop/api/wingdi/ns-wingdi-tagbitmapinfo
PD>>Здесь один элемент в массиве вроде как, но это неверно. Их количество в BITMAPINFOHEADER.biClrUsed, и надо все их установить. А в примере , что ты взял, только один поставлен.
V>Конструкция bmiColors[1] предполагает, что bmiColors является началом массива RGBQUAD,
V>который размещается в bmp-файле за заголовками. Подозреваю, что нужно было попробовать наложить
V>BITMAPINFO на начало BITMAPINFOHEADER.
Проверил, так и есть, работает. Работоспособный вариант выглядит так (часть):
BITMAPFILEHEADER *p_bfh = (BITMAPFILEHEADER *)ptr;
BITMAPINFOHEADER *p_bih = (BITMAPINFOHEADER *)(ptr + sizeof(BITMAPFILEHEADER));
BITMAPINFO *p_bi = (BITMAPINFO *)p_bih;
char *pPixels = (ptr + p_bfh->bfOffBits);
char *ppvBits = NULL;
hBmp = CreateDIBSection(NULL, p_bi, DIB_RGB_COLORS, (void **)&ppvBits, NULL, 0);
if(hBmp)
SetDIBits(NULL, (HBITMAP)hBmp, 0, p_bih->biHeight, pPixels, p_bi, DIB_RGB_COLORS);