Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Performance Frage (https://www.delphipraxis.net/92571-performance-frage.html)

.chicken 22. Mai 2007 13:28


Performance Frage
 
Also ich habe folgende Frage:
Wenn ich irgendetwas darstellen will, zB Text mit Schatten oder so, macht es mehr Sinn dann ein Bild zu laden oder das selbst zu zeichnen? Oder zB bei Gradients oder sowas alles, was ist sinnvoller?

Wenn mans selbst zeichnen kann selber zeichnen?

SirThornberry 22. Mai 2007 14:10

Re: Performance Frage
 
wenn man selbst zeichnen kann würde ich selbst zeichnen da es vom Datenvolumen her weniger ist.
Zum Beispiel ein Text hat zwischen den Buchstaben Freiraum welcher mit gespeichert wird. In einigen Fällen muss dieser Freiraum (Hintergrund) dann noch Transparent dargestellt werden was wieder Rechenleistung kostet. Dann ist es bedeutend einfach einfach den Text zur Laufzeit auszugeben.
Wenn es allerdings um Texte mit bestimmten Schriften geht ist ein Bild manchmal nicht vermeidbar weil die Schriften nicht auf jedem Zielsystem verfügbar sind.

.chicken 22. Mai 2007 14:19

Re: Performance Frage
 
Hm ok, und wenn es jetzt nicht nur um Texte geht?
Weil ich meine das kostet doch sicher Rechenzeit wenn man irgendwelche Effekte zeichnen lässt oder so, andererseits will man ja vermeiden tausend verschiedene Bilder(->viele MB) zu verwenden, oder?

SirThornberry 22. Mai 2007 14:23

Re: Performance Frage
 
Du musst das ganze ja nicht bei jedem zeichnen neu berechnen. Du kannst auch beim ersten zeichnen berechnen und das in ein Bitmap im speicher zwischenspeichern.

.chicken 22. Mai 2007 14:32

Re: Performance Frage
 
Klingt natürlich logisch ;-)

Dann hab ich dazu mal ne Frage:
Kann ich in einer Variable die nur für eine Prozedur gilt, ein Bild speichern und es am Ende der Prozedur nicht freigeben, um dann beim nächsten Aufruf der Prozedur wieder darauf zuzugreifen? Also ist das Bild dann noch wie beim alten Prozeduraufruf?

DGL-luke 22. Mai 2007 14:36

Re: Performance Frage
 
nein das kannst du nicht. das musst du dann schon global speichern.

.chicken 22. Mai 2007 14:58

Re: Performance Frage
 
Ok ;-) Danke

DGL-luke 22. Mai 2007 16:13

Re: Performance Frage
 
...das heißt: Du kannst auch mit lokalen Konstanten arbeiten.

Aber das ist nicht schön. Nicht machen!

Trotzdem ein Beispiel:

Delphi-Quellcode:
procedure DoSomething;
const
  storage: Integer = 0;
var
  bmp: TBitmap;
  ptr: Pointer;
begin
  bmp := TBitmap(TObject(storage));
  if bmp = nil then bmp := TBitmap.Create;

  //...
  //...

  ptr := @storage;
  Integer(storage^) := Integer(Pointer(bmp));
end;
Die Adresse des alloziierten Bitmaps ist dann immer in "storage" gespeichert und läuft dir nie aus dem scope.

Aber machs nicht, wenn dus nicht unbedingt brauchst! Für deinen Zweck fallen mir mindestens 2 schönere Lösungen ein.

SirThornberry 22. Mai 2007 16:20

Re: Performance Frage
 
@Luke: Hat der doppelte Cast einen Grund? (Also erst nach TObject casten um dann nach TBitmap zu casten)
Zudem geht die Variante auch nur wenn eingestellt ist das man konstanten einen Wert zuweisen darf (es also in wirklichkeit variablen sind)

DGL-luke 22. Mai 2007 16:52

Re: Performance Frage
 
Ja, stimmt, das habe ich jetzt umgangen, glaube ich. Und das mit dem doppelten Cast... sollte eigentlich nicht nötig sein, stimmt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:30 Uhr.
Seite 1 von 2  1 2      

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