Hi,
eigentlich dachte, ich das geht ganz einfach.
Naja, mittlerweile bin ich mir da nicht mehr sicher, ob das nicht ein unentdecktes Speicherproblem gibt.
Delphi-Quellcode:
function bildbearbeiten(EingangsImage: Timage): Tbitmap;
var a, b: Integer;
imo: Tbitmap;
pico: TPicture;
begin
imo := Tbitmap.create;
pico := TPicture.create;
pico := EingangsImage.Picture;
// jaa, intelligente Bezeichner ...
imo := pico.picture.bitmap
{...} // Bearbeiten des Bildes
result := imo;
// übergabe als Referenz
// ACHTUNG, folgender FEHLER:
pico.free;
//<< kille ich die,
imo.free;
// habe ich eine Exception
end;
// Bild bearbeiten
Hier knallt's, weil die Referenz fehlt. Aber ich dachte die würde solange bestehen bleiben, bis an result übergeben und die Function verlassen - und schließlich beim Caller weitergearbeitet würde.
aufrufen tu ich hier mit
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
image2.Picture.Bitmap := bildbearbeiten(image1);
// pico.free; << würde ich die hier oder im OnClose() <<<-#############################
// imo.free; löschen, wüßte Delphi nicht wo, oder was <<<-#############################
end;
diese beiden ^^
Wo/ darf ich die pico.free; imo.free; hinschreiben?
Wo gehören die hin?
Erzeuge ich nicht ein Bitmap, ohne das wieder zu zerstören/freizugeben und verbleibt das dann nicht im
RAM - kommen noch mehrere dazu?
Eine Übergabe an
form1.image2.picture.bitmap := imo; möchte ich nicht machen, da man ja bei Functionen nie weiß, ob man die mal auch in anderen Units einsetzen möchte. (mir geht es um die Generalisierbarkeit)
Danke.