在c#中,使用FileStream或简单位图更新后未保存图像

在c#中,使用FileStream或简单位图更新后未保存图像,c#,gdi+,bit-manipulation,C#,Gdi+,Bit Manipulation,我在桌面应用程序中的一个实用程序中工作,与一些图形工作有关 我必须加载小缩略图和全尺寸位图。我正在使用此代码执行此操作 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; fl

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

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

 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);
在此之后,我需要在此picturebox的图像上添加一些效果。当我在picturebox的主(大)图像上添加一些效果时,我也会在botton背景图像中添加相同的效果。当我将此缩略图保存到现有缩略图图像时,它正在保存,但当我将picturebox中的大图像保存到现有文件“myphoto.jpg”上时,它会给我一个错误,就像文件被另一个进程使用一样

//---- Add some Effects to image of Picturebox ---- //
PictureBox tempPic = flowPanel.Controls["p1"];
tempPic.Image.Save("myphoto.jpg",ImageFormat.Jpeg);
我在google和stackoverflow上找到了很多解决方案,但没有找到有用的。 如果有任何好的解决方案,请提供帮助。
可能很简单,但我已经尝试了10多个小时,但失败了。

您没有关闭打开的文件流。我总是使用构造将此类内容包装在一个
中,因此它会自动被破坏,从而关闭:

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

tempPic.Image.Save("myphoto.jpg",ImageFormat.Jpeg);

尝试将filestream设置为只读:

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

这是Microsoft的建议,针对尝试Image.FromFile的用户,它会锁定文件:

fs.close()
是否关闭流?对不起。。。我完全没听到那句话。所以我的答案并不能真正解决你的问题。尽管如此,我还是建议使用
构造,因为它可以确保清理东西,即使是在异常情况下。这个gdi+是什么?声明这是c/c++程序员的遗留api,您编写c代码吗?