Ja, das gibt ein Memory-Leak, weil der Setter von TPicture.Bitmap nicht die Referenz übernimmt, sondern eine Kopie erstellt.
Die Implementierung sieht ungefähr so aus:
Delphi-Quellcode:
type
TPicture = class
private
FBitmap: TBitmap;
procedure SetBitmap(const ABitmap: TBitmap);
// ...
public
property Bitmap: TBitmap read FBitmap write SetBitmap;
// ...
end;
procedure TPicture.SetBitmap(const ABitmap: TBitmap);
begin
FBitmap.Assign(ABitmap); // <====
end;
Das heißt, wenn „ABitmap“ der Rückgabewert einer Funktion ist, dann wird der Rückgabewert nie freigegeben.
Du musst eine zusätzliche Variable benutzen:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
Tmp: TBitmap;
begin
Tmp := bildbearbeiten(image1);
image2.Picture.Bitmap := Tmp;
Tmp.Free;
end;