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

标签 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;
 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);

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

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

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

最佳答案

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

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

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

关于c# - 更新后图像未保存,在 c# 中使用 FileStream 或简单位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13961973/

相关文章:

c# - 调度程序与多线程

c# - 保存图像时如何修复此 GDI+ 通用异常?

c++ - 基于位掩码从值中异或所有位的最快方法?

c# - 如何对无限等待的监听器进行单元测试?

c# - 如何在 wpf 数据网格中显示具有动态字段的对象?

winapi - 在 Win32 中显示带有 alpha channel 的 32 位图像

c++ - 使用 Gdiplus::Image 处理错误

Java 运算符 : |= bitwise OR and assign example

c - c 中奇怪的左移位

c# - 访问有关 clickonce 应用程序的文件夹信息