特别是我希望能够在运行时获得小 (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。
最佳答案
您必须自己扩展它们。正如您所发现的,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
方法在您完成后清理句柄。
关于c# - 有没有办法在 .NET 中获取不同大小的 Windows 系统图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3031124/