Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未处理外部异常。GDI+;中发生一般性错误;。只有在第二次通话时_C#_Gdi+ - Fatal编程技术网

C# 未处理外部异常。GDI+;中发生一般性错误;。只有在第二次通话时

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

我创建了一个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,我知道),但当我关闭第二个窗口并再次尝试打开它时(没有关闭第一个窗口),我得到
外部异常未处理。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
,但没有解决问题。