简体   繁体   English

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

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

I am loading multiple images from resources in a TImageList at runtime with this code: 我在运行时使用以下代码从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;

I want to know if I should destroy the previous bitmap ( Bitmap.Assign(nil) ) when I load a new one or this is done automatically in LoadFromResourceName method. 我想知道在加载新位图时是否应该销毁先前的位图( Bitmap.Assign(nil) ),或者在LoadFromResourceName方法中自动完成此操作。 I mean I don't want to have memory leakage... 我的意思是我不想内存泄漏...

No. When LoadFromResourceName executes, it clears any memory and resources used by the previous image, and loads the new one. 否。执行LoadFromResourceName ,它将清除前一个映像使用的所有内存和资源,并加载新的内存和资源。

Your code is fine, modulo the missing try/finally . 您的代码很好,对丢失的try/finally模。 It should be: 它应该是:

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

Without that, should an exception be raised in between assigning to Bitmap , and destroying the object, the object would not be destroyed and would be leaked. 否则,如果在分配给Bitmap和销毁对象之间引发异常,则该对象将不会销毁并且会泄漏。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM