gpt4 book ai didi

c# - 绘制图像时 : System. Runtime.InteropServices.ExternalException: GDI 中发生一般性错误

转载 作者:可可西里 更新时间:2023-11-01 08:41:05 26 4
gpt4 key购买 nike

我有一个从 Panel 创建的全局图形对象。每隔一定时间从磁盘中拾取图像并使用 Graphics.DrawImage() 绘制到面板中。它在几次迭代中工作正常,然后我得到以下有用的异常:

System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+.
at System.Drawing.Graphics.CheckErrorStatus(Int32 status)
at System.Drawing.Graphics.DrawImage(Image image, Int32 x, Int32 y)
at System.Drawing.Graphics.DrawImage(Image image, Point point)

我排除了内存泄漏的可能性,因为我在处理完图像对象后将其处理掉。我知道图像没有损坏并且可以正常读取,因为在面板停止显示之前程序可以正常执行一段时间。

我在使用 PictureBox 时遇到了同样的问题,但这次至少我得到了一个错误而不是什么都没有。

我检查了任务管理器中的 GDI 对象和 USER 对象,但无论应用程序是否工作,它们总是大约有 65 个用户对象和 165 个 GDI 对象。

我确实需要尽快弄清楚这个问题,而且我不能在 .NET 系统库中设置断点并查看执行失败的确切位置。

提前致谢。

编辑:这是显示代码:

private void DrawImage(Image image)
{
Point leftCorner = new Point((this.Bounds.Width / 2) - (image.Width / 2), (this.Bounds.Height / 2) - (image.Height / 2));
_graphics.DrawImage(image, leftCorner);
}

图片加载代码:

private void LoadImage(string filename, ref Image image)
{
MemoryStream memoryStream = DecryptImageBinary(Settings.Default.ImagePath + filename, _cryptPassword);

image = Image.FromStream(memoryStream);

memoryStream.Close();
memoryStream.Dispose();
memoryStream = null;
}

_image 是全局的,其引用在 LoadImage 中更新。它们作为参数传递,因为我只想从尽可能少的地方更改全局引用并保持其他方法独立。 _graphics 也是全局性的。

我还有一个用于网站的 webBrowser 控件,我可以一次显示图像或网站。当有时间显示图像时,执行以下代码:

webBrowser.Visible = false;
panel.Visible = true;
DrawImage(_image)
_image.Dispose();
_image = null;

_image 引用预加载的图像。

希望这对您有所帮助。

最佳答案

你的问题和我想的很像,但又不完全一样。当您加载图像时,您是从 MemoryStream 加载它。您必须在图像的整个生命周期内保持流打开,请参阅 MSDN Image.FromStream .

You must keep the stream open for the lifetime of the Image.

解决方案是在 FromImage 函数中复制图像:

private void LoadImage(string filename, ref Image image)
{
using (MemoryStream memoryStream = DecryptImageBinary(Settings.Default.ImagePath + filename, _cryptPassword))
{
using (tmpImage = Image.FromStream(memoryStream))
{
image = new Bitmap(tmpImage);
}
}

}

与我提到的处理问题类似,当底层流被垃圾回收时,图像似乎可以正常工作然后随机失败。

关于c# - 绘制图像时 : System. Runtime.InteropServices.ExternalException: GDI 中发生一般性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1772083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com