C# 未处理外部异常。GDI+;中发生一般性错误;。只有在第二次通话时
我创建了一个WPF项目,它有一个设置窗口作为主窗口,从那里我打开了一个游戏窗口。当打开游戏窗口时,下面的代码从几个图像中创建一个长图像条C# 未处理外部异常。GDI+;中发生一般性错误;。只有在第二次通话时,c#,gdi+,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); graphi
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,我知道),但当我关闭第二个窗口并再次尝试打开它时(没有关闭第一个窗口),我得到外部异常未处理。GDI+
中出现一般性错误
我尝试将Dispose()
添加到graphics
和target
中,还尝试将ImageFormat.Png
添加到target.Save
方法中,但没有任何效果
有人找到解决方案了吗?确保您正确地
使用了或调用了Dispose()
。。。包括您的位图
和图像
。这将解决您的问题。很可能您没有正确释放非托管资源。使用新位图图像(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;
您是否在任何时候使用Image.FromFile
加载bigPicture.png
图像?该方法将保持文件锁定,直到进程退出,这将防止Save
方法覆盖它。slider.ImageSource=new-BitmapImage(新Uri(@.\resources\images\transfererbeltsymbols\bigPicture.png),UriKind.Relative)代码>是我“加载”图片的方式。我还尝试在窗口关闭时设置slider.ImageSource=null
,但这无助于保持文件锁定。请看一看-它是用VB编写的,但翻译起来应该相当简单。@RichardDeeming:很好,谢谢!正如我所写的,在保存位图后,我已经尝试了target.Dispose()
和graphics.Dispose
,但没有解决问题。