我正在从文件加载位图图像。当我尝试将图像保存到另一个文件时,出现以下错误“GDI+ 中发生一般错误”。我相信这是因为文件被图像对象锁定。
好的,所以尝试调用 Image.Clone 函数。这仍然锁定文件。
唔。接下来,我尝试从 FileStream 加载位图图像并将图像加载到内存中,以便 GDI+ 不会锁定文件。这非常有效,除了我需要使用 Image.GetThumbnailImage 方法生成缩略图,它会抛出内存不足异常。显然,我需要保持流打开才能阻止此异常,但如果我保持流打开,则文件保持锁定状态。
所以这种方法不好。最后我创建了该文件的副本。所以现在我有该文件的两个版本。 1 我可以在我的 C# 程序中锁定和操作。这个另一个原始文件保持解锁状态,我可以将修改保存到其中。这样做的好处是,即使在保存更改后,我也可以恢复更改,因为我正在操作无法更改的文件副本。
当然有更好的方法来实现这一点,而不必拥有两个版本的图像文件。有任何想法吗?
好吧,如果您正在寻找其他方法来完成您所要求的操作,我认为它应该可以创建一个 MemoryStream,并向其读出 FileStream,然后从该流加载图像......
var stream = new FileStream("original-image", FileMode.Open);
var bufr = new byte[stream.Length];
stream.Read(bufr, 0, (int)stream.Length);
stream.Dispose();
var memstream = new MemoryStream(bufr);
var image = Image.FromStream(memstream);
或者在某种程度上更漂亮的东西。
我不知道这是否是您解决问题的方法。 :)
我遇到了类似的问题并最终像这样修复了它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)