我一直在使用此代码在图片框中显示图标。
Image FromIcon(Icon ico)
{
try
{
this.toolTip1.SetToolTip(pictureBox1, "The icon of the Executable");
return ico.ToBitmap();
}
catch (Exception e)
{
this.toolTip1.SetToolTip(pictureBox1, "Don't worry, it looks perfectly fine on the executable!");
MessageBox.Show(e.Message + "\r\n" + e.StackTrace);
Clipboard.SetText(e.Message + "\r\n" + e.StackTrace);
// Alternate method
return Bitmap.FromHicon(ico.Handle);
}
}
然而,它显示此错误。
Requested range extends past the end of the array.
at System.Runtime.InteropServices.Marshal.CopyToNative(Object source, Int32 startIndex, IntPtr destination, Int32 length)
at System.Runtime.InteropServices.Marshal.Copy(Byte[] source, Int32 startIndex, IntPtr destination, Int32 length)
at System.Drawing.Icon.ToBitmap()
此图标也以令人讨厌的方式显示,
这与我用于我的应用程序的图标相同。什么可能出错?
该图标与其他图标一样是32位。
如果我使用其他图标,它可以正常工作,不会弹出错误。
答案 0 :(得分:1)
我知道这是一个老问题,但我最近遇到了同样的问题,所以我认为我会针对遇到同样问题的其他人发布解决方案。
对我来说,问题是我是从PNG图像格式创建ICO文件,但是文件用于针对早于4.6的.NET框架的应用程序(即为PNG添加支持的版本) .ico文件中的帧)。请参阅下面的Icon.ToBitmap()文档中的注释:
从框架版本4.6开始,为.ico文件中的PNG帧添加了支持。针对早期版本的框架但在4.6位上运行的应用程序可以通过将以下行添加到< runtime>来选择加入新行为。 app.config文件的一部分:< AppContextSwitchOverrides value =" Switch.System.Drawing.DontSupportPngFramesInIcons = false" />
因此,一旦我将上述行添加到app.config文件,就解决了问题。