当我在TBitmap中加载新图像时,我必须首先销毁现有图像吗?

时间:2015-06-11 10:01:36

标签: delphi bitmap delphi-2009

我在运行时使用以下代码从TImageList中的资源加载多个图像:

 Bitmap:=TBitmap.Create;
 MyIcons:=TImageList.Create(self);
 Bitmap.LoadFromResourceName(HInstance,'DEFAULT16');
 MyIcons.AddMasked(BitMap,clRed);
 Bitmap.LoadFromResourceName(HInstance,'FOLDER16');
 MyIcons.AddMasked(BitMap,clRed);
 Bitmap.LoadFromResourceName(HInstance,'BACK16');
 MyIcons.AddMasked(BitMap,clRed);
 Bitmap.Free;

我想知道在加载新位图时是否应销毁先前的位图(Bitmap.Assign(nil)),否则这会在LoadFromResourceName方法中自动完成。我的意思是我不想让内存泄漏...

1 个答案:

答案 0 :(得分:4)

没有。执行<style> .dihover{transition: .5s;} .dihover:hover{background-color:#B7192A; color: white; cursor: pointer;} a.setan{color:#7E7E7E;} .setan:hover{color:white;} tr.dihover a:hover{color:white;} </style> 时,它会清除上一个映像使用的所有内存和资源,并加载新映像。

您的代码很好,以丢失的LoadFromResourceName为模。它应该是:

try/finally

如果不这样做,如果在分配给Bitmap := TBitmap.Create; try .... finally Bitmap.Free; end; 和销毁对象之间引发异常,对象就不会被破坏而且会被泄露。