错误在图片框中显示图标

时间:2013-08-22 13:19:21

标签: c# winforms icons picturebox

我一直在使用此代码在图片框中显示图标。

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()

此图标也以令人讨厌的方式显示,

enter image description here

这与我用于我的应用程序的图标相同。什么可能出错?

该图标与其他图标一样是32位。

enter image description here

如果我使用其他图标,它可以正常工作,不会弹出错误。

enter image description here

1 个答案:

答案 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文件,就解决了问题。