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

When I load a new image in a TBitmap I must destroy the existing one first?

我在运行时使用以下代码从 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 方法中自动完成的。我的意思是我不想内存泄漏...

没有。当 LoadFromResourceName 执行时,它会清除前一个图像使用的所有内存和资源,并加载新图像。

您的代码没有问题,对缺少的 try/finally 取模。应该是:

Bitmap := TBitmap.Create;
try
  ....
finally
  Bitmap.Free;
end;

否则,如果在分配给 Bitmap 和销毁对象之间引发异常,则对象不会被销毁并会泄漏。