Search code examples
delphitimage

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


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?


Solution

  • 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.