gpt4 book ai didi

c++ - 从 PNG 加载 Gdiplus 的 HICON 质量低

转载 作者:行者123 更新时间:2023-11-28 02:11:37 24 4
gpt4 key购买 nike

我正在尝试将一些 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);

现在,我遗漏了什么以及图像在哪里丢失了信息?

This is how icons show up and below the real icons (in PNG)

我已将 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 将为您提供所需的全彩色图标。

关于c++ - 从 PNG 加载 Gdiplus 的 HICON 质量低,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35488003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com