Dul*_*ttu 27 c# bitmap save savefiledialog
我在using块中使用了以下代码块和更多代码:
using (System.Drawing.Bitmap tempImg =
(System.Drawing.Bitmap)tempObj.GetData(System.Windows.Forms.DataFormats.Bitmap))
{
// ...
tempImg.Save("..\\..\\testdata\\tempImg.bmp", ImageFormat.Bmp);
// ...
}
Run Code Online (Sandbox Code Playgroud)
但我仍然得到错误:
GDI +发生了一般错误
只有在我做了一些与使用块内的代码无关的动作之后.在其他时候,这很好.tempImg.bmp也是一个临时文件,因此我删除了using块本身中的tempImg.bmp.
由于tempImg在使用中并且它被处理掉了,我认为应该解决锁定问题.
有人可以让我知道这段代码中的错误是什么?
编辑:
System.Drawing.Image要System.Drawing.Bitmap为一体的类型tempImg.
编辑: 我发现只有在创建了SaveFileDialog并且用户点击"保存"后才会出现此错误.
Dul*_*ttu 40
最后,我可以在我的代码中找到错误,并想在此提及它,因为我认为它可能对某些人有用....
由于我在tempImg.Save中给出了一个相对路径,并且在用户点击SaveFileDialog中的"Save"之后,tempImg.Save的实际路径变为:
SaveFileDialog指定的路径+相对路径
自动.
因此,如果路径不存在,则会发生此错误.
感谢每一个人的答案.
Eli*_*kiy 20
我也遇到过这个问题 - 它发生的原因是因为位图锁定而你无法保存它(如果你想我能找到确切的解释)所以无论如何解决这个问题:创建一个原始位图大小的新位图你将原始位图复制到新创建的位图,然后处理原始位图并保存新位图.
Bitmap bm3 = new Bitmap(bm2);
Run Code Online (Sandbox Code Playgroud)
然后保存.
这通常表明其他东西,可能是您自己的应用程序中的某些其他线程,已经有您尝试在文件系统级别锁定的目标文件.如果你看一下内部异常我相信它应该提到这一点.如果它不是直接在InnerException中另一种确认这一点的方法(或者发现它可能实际上是什么)是打开调试器中的第一次机会异常,并观察在"下面"抛出的异常保存然后转为此一般例外.
小智 5
尝试了这里给出的所有解决方案,但徒劳无功。最终找到了解决方案。
g.dispose();System.IO.Directory.Exists(dir);