Thema: Delphi DelphiX Cpu Entlastung ?

Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#10

Re: DelphiX Cpu Entlastung ?

  Alt 6. Feb 2007, 18:12
Zitat von ebber:
Wie genau geht das über den normalen GDI ?
Bei GDI handelt es sich um die Windows-Schnittstelle, die für das Zeichnen zuständig ist. Dabei wird auf eine spezielle Fläche gezeichnet, die Dir vielleicht als Canvas bekannt ist. GDI ist dabei wiederum nur eine Schnittstelle, die von ganz unterschiedlichen Graphic Devices (GDI = Graphic Device Interface) implementiert werden kann. Typische Vertreter sind dabei Bitmaps ebenso wie Drucker. Beide stellen Dir eine Zeichenfläche zur Verfügung und Du kannst mit den gleichen Funktionen auf beide zeichnen (soweit das Device das Unterstützt).
In Delphi sind viele GDI Funktionen in der VCL gekapselt. Verwendest Du ein TBitmap-Objekt, so kannst Du hier über die Eigenschaft Canvas und dessen Methoden einfach auf einen fertigen Zeichencanvas zugreifen, ohne dass Du hier direkt das Win-API bemühen musst. An sich würde die Arbeit mit GDI dem Arbeiten mit TBitmap und TImage entsprechen. Wichtig ist dabei, dass Du Änderungen an einer Bitmap immer im Speicher durchführen solltest, niemals direkt die angezeigte Bitmap verändern!

Das hat einen einfachen Grund, jede Veränderung an einer angezeigten Bitmap führt zu einer sofortigen aktualisierung der Selben. Zeichnest Du 10 Linien, so wir die Bitmap auch 10 mal neu gezeichnet. Das zeichnen ist aber alles andere als flink. Hier finden jede Menge Dinge statt, es muss gewartet und synchronisiert werden, Bereiche geprüft (man darf ja nichts übermalen was eigentlich vor dem eigenen Zeichenbereich liegt), usw. Natürlich ist das neunmal völlig überflüssig, da sich hier ja gleich wieder etwas ändert.
Veränderst Du die Bitmap im Speicher, so werden nur die Daten verändert (die ja nirgends angezeigt werden). Das zeichnen einer ganzen Bitmap sollte dann auch recht flink gehen. Dazu kannst Du entweder die Bitmap dem Image zuweisen oder mit der Funktion BitBlt einfach den Inhalt des Canvas vom einem Bitmap auf den Canvas des anderen kopieren (auch eine sehr schnelle Funktion!)
  Mit Zitat antworten Zitat