图标调整大小构造函数返回不正确的大小

Icon Resize Constructor Returning Incorrect Size

我正在尝试使用 System.Drawing.Icon(System.Drawing.Icon, int, int) 调整我的应用程序中嵌入的 ICO 文件的大小,但我总是得到一个大小为 32x32 像素的图标,与原始图标大小相同(由Icon.ExtractAssociatedIcon(<main EXE file>)。但是,问题中的ICO文件也包含128x128和256x256像素大小。为什么我无法从图标中获得更大的尺寸?

Icon.ExtractAssociatedIcon(...) 方法在内部使用 Shell32.dll 中的这个函数:

IntPtr ExtractAssociatedIcon(IntPtr hInst, StringBuilder lpIconPath, out ushort lpiIcon)

(http://referencesource.microsoft.com/#System.Drawing/commonui/System/Drawing/Icon.cs,8a5963a8e543d569), which returns the icon of one size only (for example 32*32). See: http://www.pinvoke.net/default.aspx/shell32.extractassociatedicon

因此,如果您调用此构造函数重载:

Icon iconOfAnotherSize = new Icon(original, newWidth, newHeight)

然后您将获得与 original 相同的图标,因为没有其他尺寸可用。

要提取其他尺寸的图标,您可以尝试使用 PrivateExtractIcons and here is the example (Delphi)。