问题
I am trying to display icon file
in a picture box. I'm using this code to set the image.
pictureBox1.Image = new Icon(openFileDialog.FileName, new Size(48, 48)).ToBitmap();
But I'm getting this exception.
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()
How to overcome this problem?
Thanks.
回答1:
Solved the problem.
pictureBox1.Image = Bitmap.FromHicon(new Icon(openFileDialog.FileName, new Size(48, 48)).Handle);
回答2:
Some icons are sized incorrectly 48x48 to 32x32.
My final code is:
Bitmap _image;
try
{
_image = new Icon(icon, width, height).ToBitmap();
}
catch(ArgumentOutOfRangeException)
{
_image = Bitmap.FromHicon(new Icon(icon, new Size(width, height)).Handle);
}
回答3:
Sometimes Bitmap.FromHicon
doesn't convert perfectly. I find another solution:
// event Paint of pictureBox1
void pictureBox1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawIcon(theIcon, 0, 0);
}
来源:https://stackoverflow.com/questions/15782857/displaying-an-icon-in-a-picturebox