HICON, загруженный Gdiplus из PNG, имеет низкое качество

Я пытаюсь загрузить несколько изображений 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);

Теперь, что я пропускаю и где изображение теряет информацию?

Вот как значки отображаются и под настоящими значками (в PNG)

я изменился ILC_MASK в ILC_MASK | ILC_COLOR32, Качество немного лучше, но нет псевдонимов.

0

Решение

Ваш PNG, скорее всего, 32-битный цвет. В вашем ImageList_Create() звонки, используйте флаги ILC_COLOR32 | ILC_MASKне ILC_MASK только.

В соответствии с MSDN, если вы не укажете один из ILC_COLORxxx флаги, по умолчанию ILC_COLOR44-битная 16-цветная графика. Это объясняет ваше снижение качества изображения. Явно указав ILC_COLOR32 даст вам полноцветные значки, которые вы хотите.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]