我有一个C#程序,它从目录中的图像创建一个位图列表。它将使用整个位图列表生成一个新图像,然后保存。当用户加载新目录以重复该过程时,将清除并重新填充位图列表。在创建对象“新位图(路径)”时加载位图。
我遇到了用户执行以下步骤时出现的问题:
从目录1加载的原始位图列表确实已清除,然后重新填充目录2中的图像。但是,Bitmap.Save()拒绝覆盖之前加载的图像,除非我调用执行Clear()后,System.GC.Collect()。
我很确定问题与保持Bitmaps有关,即使没有引用,否则为什么垃圾收集会解决问题呢?这是解决这个问题的正确方法,还是有一种“适当”的方式在C#中处理Bitmaps?感谢。
答案 0 :(得分:1)
您需要在Dispose
个实例上调用Bitmap
..以便他们释放文件句柄。
var bitmap = new Bitmap(path_to_file);
// use it
bitmap.Dispose();
或者,由于Bitmap
继承自实现Image
的{{1}},您可以这样做:
IDisposable