据我所知,有两种方法可以复制位图.
Bitmap.Clone()
Bitmap A = new Bitmap("somefile.png");
Bitmap B = (Bitmap)A.Clone();
Run Code Online (Sandbox Code Playgroud)
新的位图()
Bitmap A = new Bitmap("somefile.png");
Bitmap B = new Bitmap(A);
Run Code Online (Sandbox Code Playgroud)
这些方法有何不同?我对内存和线程方面的差异特别感兴趣.
我有一个PictureBox的图像指向某个文件"A".在执行时我想将PictureBox的图像更改为另一个"B"但我收到以下错误:
"mscorlib.dll中出现'System.IO.IOException'类型的第一次机会异常附加信息:进程无法访问文件"A",因为它正由另一个进程使用."
我将Image设置如下:
pbAvatar.Image = new Bitmap(filePath);
Run Code Online (Sandbox Code Playgroud)
如何解锁第一个文件?
我正在尝试在Winforms应用程序中显示各种文件类型的图像(包括动画.gif文件).我还必须能够修改显示的文件.(更改文件名,删除它们).
问题是Picturebox锁定图像文件,直到应用程序关闭时使用正常方式.
这意味着我不能这样做:
private void Form1_Load(object sender, EventArgs e)
{
PictureBox pic = new PictureBox();
pic.Size = new Size(250, 250);
pic.Image = Image.FromFile("someImage.gif");
this.Controls.Add(pic);
//No use to call pic.Image = null or .Dispose of it
File.Delete("someImage.gif"); //throws exception
}
Run Code Online (Sandbox Code Playgroud)
上面链接中的解决方法如下:
private void Form1_Load2(object sender, EventArgs e)
{
PictureBox pic = new PictureBox();
pic.Size = new Size(250, 250);
//using a FileStream
var fs = new System.IO.FileStream("someImage.gif", System.IO.FileMode.Open, System.IO.FileAccess.Read);
pic.Image = System.Drawing.Image.FromStream(fs);
fs.Close();
this.Controls.Add(pic);
pic.MouseClick += …Run Code Online (Sandbox Code Playgroud)