未处理外部异常.GDI+中出现一般性错误.只在第二次通话时

本文关键字:第二次 错误 一般性 异常 外部 GDI+ 未处理 | 更新日期: 2023-09-27 18:22:49

我创建了一个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()添加到graphicstarget中,也尝试将ImageFormat.Png添加到target.Save方法中,但对我来说没有任何效果

有人找到解决方案了吗?

未处理外部异常.GDI+中出现一般性错误.只在第二次通话时

使用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;

确保在每个GDI对象上正确地调用usingDispose()。。。包括您的BitmapImage。这应该可以解决您的问题。很可能您没有正确释放非托管资源。