外部异常未得到处理。 GDI +中发生了一般错误。只在第二次通话时

时间:2013-07-17 18:44:01

标签: c# gdi+

我创建了一个WPF项目,它有一个设置窗口作为主窗口,然后我打开一个游戏窗口。打开游戏窗口时,以下代码会从多个图像中创建一个长图像条。

var target = new System.Drawing.Bitmap((int)width, (int)height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
var graphics = System.Drawing.Graphics.FromImage(target);
graphics.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver;

int i = 0;
foreach (Image img in images)
{
     System.Drawing.Image drawingImg = ConvertWpfImageToImage(img);
     System.Drawing.Bitmap source = new System.Drawing.Bitmap(drawingImg);
     graphics.DrawImage(source, i, 0);
     i += 320;
}
target.Save(@".\resources\images\conveyerBeltSymbols\bigPicture.png");

这似乎没问题(虽然我第一次将位图图像保存为png,我知道),但是当我关闭第二个窗口并尝试再次打开它时(也没有关闭第一个窗口)我得到External Exception was unhandled. A generic error occurred in GDI+

我尝试向Dispose()graphics添加target,并尝试将ImageFormat.Png添加到target.Save方法,但对我没有任何作用。

有没有人有解决方案?

2 个答案:

答案 0 :(得分:2)

使用new BitmapImage(Uri)构造函数加载图片会使文件保持锁定状态。尝试使用:

var image = new BitmapImage();
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = new Uri(@".\resources\images\conveyerBeltSymbols\bigPicture.png", UriKind.Relative);
image.EndInit();

slider.ImageSource = image;

答案 1 :(得分:0)

确保您在每个GDI对象上正确using或致电Dispose() ...包括您的BitmapImage。这应该可以解决您的问题。您可能无法正确释放非托管资源。