Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Bitmap mehrmals neu aus Datei laden

  Alt 25. Nov 2015, 19:37
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)

Geändert von Sir Rufo (25. Nov 2015 um 19:43 Uhr)
  Mit Zitat antworten Zitat