[英]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.