Re[2]: Загрузка .bmp в HBITMAP с уменьшением
От: Norfolc Тренажеры интуиции
Дата: 18.05.05 09:37
Оценка:
Здравствуйте, avs.prg, Вы писали:

AP>Немного непонятен вопрос...требуется вывести на экран уменьшенное изображение или сохранить в файле на диске?

Необходимо вывести на экран.
У меня есть TreeView control, к которому присоединён ImageList. И я полученный HBITMAP добавляю в этот ImageList.
Делаю следующим образом:

Создаю ImageList
m_ImageList = ImageList_Create(THUMBNAIL_SIZE, THUMBNAIL_SIZE, ILC_COLOR24, 0, 1);


Получаю HBITMAP hThumb
void HUGEP * buf;
//...
//Получаем данные в формате .bmp в buf
//...
BITMAPFILEHEADER* fh;
fh = (BITMAPFILEHEADER*) buf;
BITMAPINFO *bmi, bmiTh;
bmi = (BITMAPINFO*)((char*) buf+sizeof(BITMAPFILEHEADER));

HDC hdc = CreateCompatibleDC(NULL);
void* buf2 = NULL;
HBITMAP hThumb, oldObj;
bmiTh = *bmi;
bmiTh.bmiHeader.biWidth = width; //width - нужная ширина
bmiTh.bmiHeader.biHeight = heigth;//heigth - нужная высота
hThumb = CreateDIBSection(hdc, &bmiTh, DIB_RGB_COLORS, &buf2, NULL, 0);
oldObj = (HBITMAP)SelectObject(hdc, hThumb);
SetStretchBltMode(hdc, COLORONCOLOR);
int x = StretchDIBits(hdc, 0, 0, width, heigth, 0, 0, bmi->bmiHeader.biWidth, bmi->bmiHeader.biHeight, (char*)buf + fh->bfOffBits, bmi, DIB_RGB_COLORS, SRCCOPY);
hThumb = (HBITMAP)SelectObject(hdc, oldObj);


и затем этот hThumb добавляю в m_ImageList.
Изображение выводится, но цвета у него не такие как в оригинале (особенно касается 8-битных в градациях серого).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.