12

我正在尝试icon file在图片框中显示。我正在使用此代码来设置图像。

pictureBox1.Image = new Icon(openFileDialog.FileName, new Size(48, 48)).ToBitmap();

但我得到了这个例外。

System.ArgumentOutOfRangeException: 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()

如何克服这个问题?

谢谢。

4

3 回答 3

12

解决了这个问题。

pictureBox1.Image = Bitmap.FromHicon(new Icon(openFileDialog.FileName, new Size(48, 48)).Handle);
于 2013-04-03T09:06:31.517 回答
4

某些图标的大小不正确,为 48x48 到 32x32。

我的最终代码是:

    Bitmap _image;
    try
    {
     _image = new Icon(icon, width, height).ToBitmap();
    }
    catch(ArgumentOutOfRangeException)
    {
     _image = Bitmap.FromHicon(new Icon(icon, new Size(width, height)).Handle);
    }
于 2015-10-27T15:56:39.397 回答
0

有时Bitmap.FromHicon不能完美转换。我找到了另一个解决方案:

// event Paint of pictureBox1
void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    e.Graphics.DrawIcon(theIcon, 0, 0);
}
于 2018-03-23T15:34:11.187 回答