当添加到List中时,位图基本上被删除了。 我做错了什么?
处理位图是否会破坏添加到List中的位图?
List<Bitmap> _list = new List<Bitmap>();
public void MyMethod()
{
using (var _bitmap = new Bitmap(1920, 1080))
{
_list.Add(_bitmap);
}
}
我在第_list.Add(_bitmap);
行添加了断点,这是添加前的位图:
这就是它在列表中的时间:
答案 0 :(得分:2)
这是你的行
using (var _bitmap = new Bitmap(1920, 1080))
{
_list.Add(_bitmap);
} //_bitmap is destroyed here
Bitmal
派生自实现IDisposable
的{{3}}类,因此在关闭结束时,Dispose
将在Bitmap
上调用。
您可能希望避免在此方案中使用using
。
值得一提的是_list.Add(..)
添加了创建的位图实例的引用,并且不复制/克隆它。
答案 1 :(得分:0)
处理位图是否会破坏添加到List中的位图?
嗯,当然可以。该列表内部没有任何位图,它只有指向位图的指针(即指向存储每个位图的存储器地址的指针)。因此,一旦处理了位图,指针就会指向一个空的内存地址。
如果您正在从需要释放的文件或其他资源创建这些位图,那么在创建位图后克隆位图,处理原始位图(您已使用using()
语句执行此操作),并将克隆添加到列表中:
using (var _bitmap = new Bitmap("flower.png")) {
Bitmap clone = Bitmap(_bitmap);
_list.Add(clone);
}