Zitat: |
Die VCL-Komponenten werden ja automatisch freigegeben; wenn ich aber das Bitmap eines TImage auf z.B. den Rückgabewert einer Funktion(konkret: bitmapDrehen) setzen will, muss ich dann das Ursprüngliche Bitmap erst mit Image1.Picture.Bitmap.Destroy freigeben, bevor ich es auf Image1.Picture.Bitmap := myFunction setzen kann? |
Also zunächst einmal: Wir Destroy-en nicht, wir Free-en.
Davon mal abgesehen kannst Du über Image.Picture.Assign(neuebitmap) bzw. Image.Picture.Bitmap.Assign(neuebitmap) den Bild-Inhalt einer Bitmap dem Image zuweisen, ohne dass Du da irgendwas zuweisen musst. Assign kopiert die Bitmap-Daten direkt, kümmert sich also selber um das Freigeben des bestehenden und hinzufügen des neuen Bildes.
Wenn Du aber über eine Funktion eine Bitmap zurücklieferst, und innerhalb der Funktion die Bitmap Createst, dann musst Du diese nach ihrer Verwendung (z.B. wie oben erwähnt nach dem Assign) mit Free wieder freigeben. Also z.B. so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| function erzeugebitmap:TBitmap; begin result:=TBitmap.Create; with result do begin width:=100; height:=100; with Canvas do begin brush.color:=clYellow; brush.style:=bsSolid; fillrect(rect(0,0,100,100)); end; end; end;
.... neuebitmap:=erzeugebitmap; image.picture.assign(neuebitmap); neuebitmap.Free; .... |
Sowas wie das hier sollte man nicht machen - Du greifst da zu tief in das Geschehen der Image-Kompo ein. Ich weiß gar nicht, ob das überhaupt geht. Wenn es geht, dann müsste neuebitmap anschließend aber NICHT mehr freigegeben werden, weil das Image es ja weiter verwendet.
Delphi-Quelltext
1: 2: 3: 4:
| .... Image.Picture.bitmap.Free; Image.Picture.bitmap:=neuebitmap; .... |