修改图片,保存并替换原图片时,“GDI+ 中发生一般性错误”
2013-04-20 15:07
846 查看
在使用System.Drawing.Image.Save 方法保存图片时会出现,“GDI+ 中发生一般性错误”。
(猜测)这是因为加载的原图片资源没有得到释放,那么在Save新图片时,会强制将原图片删除,但此时原图片还在被使用,所有发生错误。想到的解决办法1:复制一份,将原图片dispose()。使用图片的Clone()方法,但是没有达到希望的效果,依然不行。办法2:使用Graphic对象绘制了一份,然后将原来的图片释放。该方法可行。
注:使用using语句简化资源释放的过程,并且能够保证资源的恰当释放。
(猜测)这是因为加载的原图片资源没有得到释放,那么在Save新图片时,会强制将原图片删除,但此时原图片还在被使用,所有发生错误。想到的解决办法1:复制一份,将原图片dispose()。使用图片的Clone()方法,但是没有达到希望的效果,依然不行。办法2:使用Graphic对象绘制了一份,然后将原来的图片释放。该方法可行。
注:使用using语句简化资源释放的过程,并且能够保证资源的恰当释放。
private void openBtn_Click(object sender, EventArgs e) { using (mainOpenFileDialog) { // 打开对话框设置 mainOpenFileDialog.Filter = "所有文件(*.*)|*.*|(*.jpg)|*.jpg|(*.png)|*.png|(*.ico)|*.ico"; mainOpenFileDialog.FilterIndex = 2; mainOpenFileDialog.InitialDirectory = Application.StartupPath; if (mainOpenFileDialog.ShowDialog() == DialogResult.OK) { imageUrl = mainOpenFileDialog.FileName; // 从本地读取图片,并释放资源 using (Bitmap tempImage = Bitmap.FromFile(imageUrl) as Bitmap) { // 创建本地图片的一个副本,由image引用,这样读取到的图片资源就可以释放,接下来操作的就是刚刚创建的副本 image = new Bitmap(tempImage.Width, tempImage.Height, PixelFormat.Format24bppRgb); using (Graphics g = Graphics.FromImage(image)) { g.DrawImage(tempImage, 0, 0); } } mainPicBox.Image = image; mainPicBox.BorderStyle = BorderStyle.Fixed3D; mainPicBox.SizeMode = PictureBoxSizeMode.Zoom; } } } private void modifyBtn_Click(object sender, EventArgs e) { ImageOperation.GetPixel_Example(image); this.mainPicBox.Invalidate(); } private void saveBtn_Click(object sender, EventArgs e) { try { image.Save(imageUrl, ImageFormat.Jpeg); MessageBox.Show("保存成功"); } catch (Exception ex) { MessageBox.Show(ex.Message); } } } public class ImageOperation { public static void GetPixel_Example(Bitmap bitmap) { for (int i = 0; i < bitmap.Width; i += 2) for (int j = 0; j < bitmap.Height; j += 2) bitmap.SetPixel(i, j, Color.Black); } }
相关文章推荐
- C#保存图片时提示“GDI+ 中发生一般性错误”
- GDI+ 中发生一般性错误 asp.net保存图片
- 图片在保存的时候===》出现这个异常:GDI+ 中发生一般性错误
- .net生成缩略图及水印图片时出现GDI+中发生一般性错误解决方法
- 关于生成缩略图及水印图片时出现GDI+中发生一般性错误解决方法
- 保存Bitmap到内存流中引发“GDI+中发生一般性错误”
- 总结:C# Bitmap保存的问题,eg:GDI+中发生一般性错误 .jpg 正由另一个进程使用 ,该进程无法访问文件
- C# Bitmap保存的问题,eg:GDI+中发生一般性错误 .jpg 正由另一个进程使用 ,该进程无法访问文件
- asp.net图片添加水印以及GDI+ 中发生一般性错误的解决方法
- GDI+中发生一般性错误之图片转化为字节数组
- GDI+中发生一般性错误之图片转化为字节数组
- .net生成缩略图及水印图片时出现GDI+中发生一般性错误解决方法
- GDI+中发生一般性错误的解决办法(转载)
- “GDI+中发生一般性错误” 的终极解决办法! 转自cici 自娱自乐
- c# 旋转图片 无GDI+一般性错误
- GDI+ 中发生一般性错误
- GDI+中发生一般性错误的解决办法 from http://www.cnblogs.com/winzheng/archive/2008/12/23/1360440.html
- 处理【GDI+ 中发生一般性错误】
- Image.Save()发生“GDI+ 中发生一般性错误”
- ASP.NET输出PNG图片时出现GDI+一般性错误的解决方法