AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi FMX: TBitmap.Assign Methode erscheint mir nicht korrekt
Thema durchsuchen
Ansicht
Themen-Optionen

FMX: TBitmap.Assign Methode erscheint mir nicht korrekt

Ein Thema von Sherlock · begonnen am 17. Apr 2018 · letzter Beitrag vom 18. Apr 2018
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: FMX: TBitmap.Assign Methode erscheint mir nicht korrekt

  Alt 18. Apr 2018, 12:08
Ja, ungefähr. Wenn "komplexe" Classmember vorhanden sind, werden die dann über deren Assign geklont.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#12

AW: FMX: TBitmap.Assign Methode erscheint mir nicht korrekt

  Alt 18. Apr 2018, 12:38
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 TBitmap mit dem Wert in FImage passiert (nur eben explizit).

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:
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;
Keine dieser Varianten erzeugt allerdings ein Speicherleck und die Assign -Methode von TBitmap ist völlig korrekt, auch wenn diese noch so ungewöhnlich aussieht.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz