![]() |
AW: FMX: TBitmap.Assign Methode erscheint mir nicht korrekt
Ja, ungefähr. Wenn "komplexe" Classmember vorhanden sind, werden die dann über deren Assign geklont.
Sherlock |
AW: FMX: TBitmap.Assign Methode erscheint mir nicht korrekt
Ja, dachte ich mir ... darum habe ich extra ein string gewählt, denn dort wird beim Zuweisen nicht der Inhalt kopiert, sondern nur die Referenz (mit Erhöhung des Referenz-Zählers).
Es passiert dort also hinter den Kulissen exakt das Gleiche, was bei
Delphi-Quellcode:
mit dem Wert in
TBitmap
Delphi-Quellcode:
passiert (nur eben explizit).
FImage
Der tiefere Sinn dahinter: Ein und dasselbe Bild braucht nur einmal im Speicher liegen auch wenn man es an n Stellen anzeigen möchte.
Delphi-Quellcode:
Keine dieser Varianten erzeugt allerdings ein Speicherleck und die
var
bitmaps: TObjectList<TBitmap>; b, bmp: TBitmap; begin ... // Variante 1 - langsam, viel Spiecher verbraten for i := 1 to 100 do begin bitmaps.Add( TBitmap.CreateFromFile( 'test.png' ) ); end; // Variante 2 - langsamer, viel Speicher verbraten bmp := TBitmap.CreateFromFile( 'test.png' ); try for i := 1 to 100 do begin b := TBitmap.Create(); b.SetSize( bmp.Size ); b.CopyFromBitmap( bmp ); bitmaps.Add( b ); end; finally bmp.Free(); end; // Variante 3 - sehr schnell, sehr wenig Speicher bmp := TBitmap.CreateFromFile( 'test.png' ); try for i := 1 to 100 do begin b := TBitmap.Create(); b.Assign( bmp ); bitmaps.Add( b ); end; finally bmp.Free(); end; ... end;
Delphi-Quellcode:
-Methode von
Assign
Delphi-Quellcode:
ist völlig korrekt, auch wenn diese noch so ungewöhnlich aussieht.
TBitmap
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz