Я пытаюсь загрузить несколько изображений PNG в WinAPI ImageList
в качестве значков для элементов, отображаемых в ListView
, Я делаю это с Gdiplus
и проблема у меня в том, что качество ужасное. Это как глубина цвета уменьшается или что-то.
Вот как я это делаю (в функции, вызываемой из WinMain
, как раз перед циклом):
HIMAGELIST hLarge;
HIMAGELIST hSmall;
hLarge = ImageList_Create(GetSystemMetrics(SM_CXICON),
GetSystemMetrics(SM_CYICON),
ILC_MASK, 1, 1);
hSmall = ImageList_Create(GetSystemMetrics(SM_CXSMICON),
GetSystemMetrics(SM_CYSMICON),
ILC_MASK, 1, 1);
ListView_SetImageList(hWndListView, hLarge, LVSIL_NORMAL);
ListView_SetImageList(hWndListView, hSmall, LVSIL_SMALL);
HICON hIconItem
Gdiplus::Bitmap *bitmap = new Gdiplus::Bitmap(image_path, 0);
bitmap->GetHICON(&hIconItem);
ImageList_AddIcon(hSmall, hiconItem);
ImageList_AddIcon(hLarge, hiconItem);
Теперь, что я пропускаю и где изображение теряет информацию?
я изменился ILC_MASK
в ILC_MASK | ILC_COLOR32
, Качество немного лучше, но нет псевдонимов.
Ваш PNG, скорее всего, 32-битный цвет. В вашем ImageList_Create()
звонки, используйте флаги ILC_COLOR32 | ILC_MASK
не ILC_MASK
только.
В соответствии с MSDN, если вы не укажете один из ILC_COLORxxx
флаги, по умолчанию ILC_COLOR4
4-битная 16-цветная графика. Это объясняет ваше снижение качества изображения. Явно указав ILC_COLOR32
даст вам полноцветные значки, которые вы хотите.
Других решений пока нет …