Die Bitmap FActKeyedFrame ist bereits instanziert und wurde zu Beginn von einer anderen Bitmap geladen also FActKeyedFrame:=BufferBitmap;
Könnte da der Fehler liegen?
Ja, denn so schickst du die Instanz ins MemLeak-Nirwana.
Delphi-Quellcode:
// Instanz erzeugen
FActKeyedFrame := TBitmap.Create;
// Instanz zuweisen
FActKeyedFrame := BufferBitmap;
// ei jo, die eben erzeugte Instanz dümpelt jetzt im Speicher rum ... und keiner weiß wo
...
// BufferBitmap freigeben, die brauche ich ja nicht mehr, oder?
FreeAndNil( BufferBitmap );
// rumms
FActKeyedFrame.LoadFromFile(...);
darum
Delphi-Quellcode:
// Instanz erzeugen
FActKeyedFrame := TBitmap.Create;
// Instanz-Werte zuweisen
FActKeyedFrame.Assign( BufferBitmap );
Um das Bild zu löschen kannst du auch Bitmap := nil schreiben.
Nein, einfach so geht das nicht. Das geht nur, wenn es sich bei
Bitmap
um eine
Eigenschaft handelt und der
Setter der Eigenschaft diese
nil
-Zuweisung entsprechend behandelt.
Delphi-Quellcode:
procedure TFoo.SetBitmap( const Value : TBitmap );
begin
if Assigned( Value ) then
FBitmap.Assign( Value )
else
FBitmap.Clear;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)