2010-11-01 34 views
1

我有一系列位图图像需要使用.NET(C#)保存,但运行到通用的GDI +错误。重新使用Image.Save,GDI的位图变量+错误

我想重用相同的变量,这可能是我的问题。

例如:

Bitmap pic = MethodThatReturnsBitmap(); 
pic.Save(MyPath); 

pic = AnotherMethodThatReturnsBitmap(); 
pic.Save(AnotherPath); 

我是否需要引入独特的变量和/或每个.Save()之间处置?

+0

很难说只是这段代码有什么问题,但它不可能是你使用同一个变量的原因,因为它只是一个指针。 – Doggett 2010-11-01 23:43:36

+0

我会建议在第一次保存后添加一个断点或一个小的延迟,看看它是否有效(仅用于测试)。这可能是一个处置问题。 – Inisheer 2010-11-01 23:50:28

+0

@Doggett - 我把它简化了一些,我在不同的测试机器上得到了不同的结果,运行类似的代码,所以错误并不总是一致的。换句话说,它有时会起作用,但偶尔也会抛出'Save'异常。我倾向于认为延迟/处置(正如AJ和JTA所建议的)是解决方案。 – JYelton 2010-11-01 23:53:15

回答

3

GDI +对资源管理真的很挑剔。我发现,如果有疑问,总是用.Dispose()来完成一组位图操作。所以,简单的答案是,我认为你需要Dispose()。我会更进一步,并将两个位图放在using声明中。

using(Bitmap pic = MethodThatReturnsBitmap()) 
{ 
    pic.Save(Path); 
} 
using(Bitmap pic = AnotherMethodThatReturnsBitmap()) 
{ 
    pic.Save(AnotherPath); 
} 
+1

似乎不太可能是问题所在,如果这是真的,那么您无法保存图像而无需事后处理。当然,如果你不打算做任何其他事情,总是会更好地处置或使用。 – Doggett 2010-11-01 23:56:18

+0

事实证明,当我调用'Save'时,我的一个对象的Image属性抛出了异常;通过实例化一个新的位图,并使用using语句,问题就消失了。感谢您的建议。 – JYelton 2010-11-02 01:02:52