GDI+中又出现了一个通用错误
本文关键字:一个 错误 GDI+ | 更新日期: 2023-09-27 18:05:12
我明白,这个消息意味着什么(需要为非托管资源做Dispose),但真的不明白为什么它发生在我的情况下:
System.Drawing.Image imgAnimaha, imgNoanimaha;
using (System.IO.Stream file = thisExe.GetManifestResourceStream("WindowsApplication1.img.noanimaha135.gif"))
{
using (System.Drawing.Image img = Image.FromStream(file))
{
imgNoanimaha = (System.Drawing.Image)img.Clone();
}
}
using (System.IO.Stream file = thisExe.GetManifestResourceStream("WindowsApplication1.img.animaha135.gif"))
{
using (System.Drawing.Image img = Image.FromStream(file))
{
imgAnimaha = (System.Drawing.Image)img.Clone();
}
}
pbDiscovery.Image = imgAnimaha;
在这种情况下,我得到"一个通用的错误发生在GDI+"为什么和如何解决?PS.如果我写以下内容:
pbDiscovery.Image = imgNoanimaha;
它工作正常。
问题是Image.Clone(),如:
using (System.Drawing.Image img = Image.FromStream(file))
{
imgAnimaha = (System.Drawing.Image)img.Clone();
}
…不创建图像的深拷贝。它创建所有标题信息的副本,但不创建实际的像素数据(它只是指向原始像素数据)。当using超出作用域时,原始(且唯一)像素数据将与原始img对象一起被处理。
那么问题就变成了,这里使用的意义是什么?我认为没有。将图像读取到System.Drawing.Image对象中,并在需要像素数据时(例如,只要图像需要重新绘制)保持其存活,并且仅在不需要再次显示时才将其丢弃。