【发布时间】:2018-07-09 09:13:36
【问题描述】:
我有一个 C# WPF 应用程序,可以将图像切割成我需要的大小。 WPF 窗口用于输入用户 ID 以将图像保存到数据库中。当我测试我的应用程序时,它有时可以工作,有时我在将图像保存到文件系统的行中的 gdi+ 中出现错误。
这是我的代码:
public static void CutImage(Image image)
{
//create new image
Bitmap source = new Bitmap(image);
//cut image
Bitmap cuttedImage = source.Clone(new System.Drawing.Rectangle(250, 0, 5550, 4000), source.PixelFormat);
//copy bitmap to avoid "general error in gdi+"
Bitmap copyImage = new Bitmap(cuttedImage.Width, cuttedImage.Height, PixelFormat.Format24bppRgb);
Graphics g = Graphics.FromImage(copyImage);
g.DrawImageUnscaled(cuttedImage, 0, 0);
//dispose graphics object
g.Dispose();
//dispose image
cuttedImage.Dispose();
//save image to filesystem
copyImage.Save(@"path\tmp.jpg", ImageFormat.Jpeg);
}
//get image
Image i = Image.FromFile(path\image.jpg);
//cut image
CutImage(i);
我搜索了一个解决方案,有人说我必须创建一个从 Image.FromFile() 获得的图像的副本。但错误有时仍然会发生。我尝试了几次,它发生时似乎是随机的。错误总是在 Image.Save() 行。
有人知道如何解决这个问题,还是有 Image.Save() 的替代方法?
感谢您的帮助!
【问题讨论】:
-
您创建了这么多位图,但您并没有处理它们。每个
IDisposable都必须在你完成它们后显式处理。 -
你为什么要使用 System.Drawing.Bitmap?它是 WinForms,而不是 WPF。
标签: c#