2

我正在为桌面应用程序中的一个实用程序工作,与一些图形工作有关。

我必须加载小缩略图和全尺寸位图。我正在使用此代码执行此操作。

 FileStream fs = new FileStream("myphoto.jpg", FileMode.Open);
 Image imgPhoto = Image.FromStream(fs);
 fs.Close();
 PictureBox p = new PictureBox();
 p.Name = "p1";
 p.Image = imgPhoto;
 flowPanel.Controls.Add(p);
 //---- 
 FileStream fs = new FileStream("myphoto_thumb.jpg", FileMode.Open);
 Image img = Image.FromStream(fs);
 fs.Close();
 Button b_thumb = new Button();
 b_thumb.Name = "thumb1";
 b_thumb.BackgroundImage = img;
 flowBottom.Controls.Add(b_thumb);

在此之后,我需要在此图片框的图像上添加一些效果。当我为图片框中的主(大)图像添加一些效果时,我也在底部背景图像中添加相同的效果。当我将此缩略图图像保存到现有缩略图图像时它正在保存,但是当我将图片框中的大图像保存在现有文件“myphoto.jpg”上时,它给了我错误,比如文件正在被另一个进程使用

//---- Add some Effects to image of Picturebox ---- //
PictureBox tempPic = flowPanel.Controls["p1"];
tempPic.Image.Save("myphoto.jpg",ImageFormat.Jpeg);

我在 google 和 stackoverflow 上找到了很多解决方案,但没有找到帮助。如果有任何好的解决方案,请帮助。可能很简单,但我尝试了 10 多个小时但失败了。

4

2 回答 2

1

您不会关闭您打开的 FileStream。我总是将这种东西包装在一个using结构中,所以它会自动被破坏,从而关闭:

using (FileStream fs = new FileStream("myphoto.jpg", FileMode.Open)) {
  // Do stuff
}

tempPic.Image.Save("myphoto.jpg",ImageFormat.Jpeg);
于 2012-12-19T22:05:43.677 回答
0

尝试将您的文件流设置为只读:

fs = New System.IO.FileStream("myphoto.jpg", 
     IO.FileMode.Open, IO.FileAccess.Read)

这是 Microsoft 的建议,针对尝试 Image.FromFile 并锁定文件的用户:http: //support.microsoft.com/kb/309482

于 2012-12-19T22:23:35.060 回答