【问题标题】:Error showing Icon in picturebox在图片框中显示图标时出错
【发布时间】:2013-08-22 13:19:21
【问题描述】:

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

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 位的。

如果我使用另一个图标,它可以正常工作并且不会弹出错误。

【问题讨论】:

  • 图像有多少位?不确定是否支持 >32 位(如果可能?)
  • @Sayse 我不知道该怎么说图片。如果你愿意,我会上传图标。
  • 我认为可能需要它,否则,请尝试使用任何其他图标并查看是否正常
  • @MrFox 这是我正在使用的替代方法,但渲染效果不佳。

标签: c# winforms icons picturebox


【解决方案1】:

我知道这是一个老问题,但我最近遇到了同样的问题,所以我想我会为面临同样问题的其他人发布解决方案。

对我来说,问题在于我是从 PNG 图像格式创建 ICO 文件,但使用这些文件的应用程序针对的是早于 4.6 的 .NET 框架(即添加了对 PNG 的支持的版本.ico 文件中的帧)。请参阅以下 Icon.ToBitmap() 文档中的注释:

从框架版本 4.6 开始,为 .ico 文件中的 PNG 帧添加了支持。针对框架早期版本但在 4.6 位上运行的应用程序可以通过将以下行添加到 app.config 文件的 部分来选择加入新行为:

因此,一旦我将上述行添加到 app.config 文件中,问题就解决了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-15
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多