Re[9]: LoadImage из памяти
От: Vaynamond Россия  
Дата: 24.05.19 14:24
Оценка:
Здравствуйте, 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);
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.