考虑以下用于加载、修改和保存位图图像的代码:
using (Bitmap bmp = new Bitmap("C:\\test.jpg"))
{
bmp.RotateFlip(RotateFlipType.Rotate180FlipNone);
bmp.Save("C:\\test.jpg");
}
它运行没有任何异常。
但考虑一下这个:
using (Bitmap bmp = new Bitmap("C:\\test.jpg"))
{
using (Bitmap bmpClone = (Bitmap)bmp.Clone())
{
//You can replace "bmpClone" in the following lines with "bmp",
//exception occurs anyway
bmpClone.RotateFlip(RotateFlipType.Rotate180FlipNone);
bmpClone.Save("C:\\test.jpg");
}
}
它以带有以下消息的ExternalException 结尾:“GDI+ 中发生一般错误”。
这是怎么回事?对打开的文件有任何类型的锁定吗?如果是这样,为什么第一个块有效?当我们可能需要在内存中编辑主对象或其克隆并且仍然将它们都加载到内存中时,克隆 System.Drawing.Bitmap 的正确代码是什么?
您还可以使用简单的解决方法加载位图而不使用文件锁定:
using (Stream s = File.OpenRead(@"\My Documents\My Pictures\Waterfall.jpg"))
Bitmap _backImage = (Bitmap)Bitmap.FromStream(s);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)