首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有办法在.NET中获得不同大小的Windows系统图标?

有没有办法在.NET中获得不同大小的Windows系统图标?
EN

Stack Overflow用户
提问于 2010-06-13 12:52:58
回答 2查看 7.2K关注 0票数 18

特别是,我希望能够在运行时获得小图标(16 X 16)。

我试过这个:

new Icon(SystemIcons.Error, SystemInformation.SmallIconSize)

它应该“尝试找到与请求大小相匹配的图标版本”,但它仍然给我一个32 x 32的图标。我也试过了:

Size iconSize = SystemInformation.SmallIconSize;
Bitmap bitmap = new Bitmap(iconSize.Width, iconSize.Height);
using (Graphics g = Graphics.FromImage(bitmap))
{
    g.DrawIcon(SystemIcons.Error, new Rectangle(Point.Empty, iconSize));
}

但这只是将32 x 32图标缩小为丑陋的16 x 16图标。

我曾经考虑过从VS图像库中取出图标,但我真的希望它们随着操作系统的不同而动态变化(XP上的XP图标,Vista上的Vista图标,等等)。如果需要的话,我愿意P/Invoke。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-28 06:47:41

我结束了P/Invoking。事实证明,LoadIconLoadImage都表现出与SystemIcons相同的(有缺陷的,IMO)行为。但是SHGetStockIconInfo,在Vista和更高版本上可用,如预期的那样工作,返回我一直在寻找的小的,官方的,设计师制作的图标。

在XP和更早的版本上,我又回到了使用VS Image Library中提供的小图标。

如果您正在考虑自己使用P/调用SHGetStockIconInfo,我建议您查看一下Windows API Code Pack,看看是如何实现的。

票数 6
EN

Stack Overflow用户

发布于 2010-06-16 12:50:58

您必须自己缩放它们。如您所知,SystemIcons只有32x32。您可以根据需要轻松地将其扩展到16或48。使用插值来获得一个漂亮的双三次调整大小。我们已经成功地做了很多次,创建了非常漂亮的16x16版本,无论是运行XP、Vista还是7,它都运行得很好。

Size iconSize = SystemInformation.SmallIconSize;
Bitmap bitmap = new Bitmap(iconSize.Width, iconSize.Height);

using (Graphics g = Graphics.FromImage(bitmap))   
{
    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
    g.DrawImage(SystemIcons.Error.ToBitmap(), new Rectangle(Point.Empty, iconSize));   
}

Icon smallerErrorIcon = Icon.FromHandle(bitmap.GetHicon());

请务必查看MSDN示例here,特别是它们在完成时使用DestroyIcon方法来清理句柄。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3031124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档