当我在 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
和销毁对象之间引发异常,则对象不会被销毁并会泄漏。
我在运行时使用以下代码从 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
和销毁对象之间引发异常,则对象不会被销毁并会泄漏。