Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does clearing an image by assigning Image1.Picture := nil; cause a memory leak?

Tags:

delphi

timage

I have read here http://delphi.about.com/od/adptips2005/qt/cleartimage.htm that a way to clear an image from a TImage is to assign nil to .Picture, like this:

Image1.Picture := nil;

I just want to be sure... I guess the Image1.Picture.loadFromFile(fileName) will allocate some memory and simply setting it to nil, without freeing the memory, will lead to a memory leak.

Am I correct? If this is so, which is the "proper" way to unload and clear an image from a TImage?

like image 503
ZioBit Avatar asked Jun 02 '14 09:06

ZioBit


1 Answers

The TImage.Picture setter is TImage.SetPicture() in the ExtCtrls unit, which calls TPicture.Assign() in the Graphics unit, which calls TPicture.SetGraphic(), which will free an existing Graphic before assigning a new Graphic.

So the usage of

Image1.Picture := nil; 

Will ultimately call

Image1.Picture.SetGraphic(nil); 

And will not cause any memory leak.

like image 74
bummi Avatar answered May 22 '23 10:05

bummi