![]() |
TGPGraphic mit Zwischenbuffer aktualisiert sich nicht
Hallo,
Aktuell benutze ich die GDIPlus Library von ![]() Ich wollte eine Animation zeichnen, und damit diese nicht flackert, das ganze in in eine Bitmap zwischenrendern, welche anschließend auf dem canvas landet. Eigentlich sollte ich folgendes nur einmal machen müssen:
Delphi-Quellcode:
Und in der animationsroutine:
FGraphic := TGPGraphics.Create(FBuffer.Canvas.Handle);
Delphi-Quellcode:
das klappt aber irgendwie nur für den ersten Frame. Danach aktualisiert sich die oberfläche nicht mehr. Ich bin gezwungen das FGraphic object jeden Frame neu zu erstellen, damit alles klappt.
Canvas.draw(0, 0, FBuffer)
Benutze ich statt der Bitmap einfach direkt das Fensterhandle: (Constructoren sind überladen)
Delphi-Quellcode:
Muss ich dies nur ein einziges mal machen. Allerdings flackert die animation mitunter(was ich eigentlich vermeiden wollte).
FGraphic := TGPGraphics.Create(MyControl.Handle);
Jemand eine Idee? MFG Memnarch |
AW: TGPGraphic mit Zwischenbuffer aktualisiert sich nicht
So habe es jetzt so gelößt, dass ich 2 TGPGraphics erzeuge. das erste Benutzt eine TGPBitmap als Backbuffer, das zweite wird vom Fensterhandle erzeugt.
Nachteil: Es ist um einiges langsamer. Zeichenfläche 470*255, Animation 60Fps Alte methode: Jedesmal neues GDIP-Objekt erstellen, in eine normale TBitmap und diese per TCanvas zeichnen benötigte von einem Dualcore@2.66GHZ ~3% (1.5% fürs Zeichnen des Backbuffers und 1.5% für das Zeichnen aufs Fenster) Neue Methode: Einmalig die GDIP-Objekte erstellen, erst in den Backbuffer zeichnen und dann per DrawImage in das GDIP-Object des Fensters zeichnen ~7%(1.5% fürs zeichnen des Backbuffers, der rest fürs Zeichnen ins Fenster) Das wirkt doch irgendwie arg langsam, für das reine zeichnen eines Bildes aufs Fenster und skaliert entsprechend schlecht mit wachsender größe der Zeichenfläche. |
AW: TGPGraphic mit Zwischenbuffer aktualisiert sich nicht
Okay habe auch das Problem gelößt. Ich benutze wieder nur ein TGPGraphics (Backbuffer) aber erstelle die zeichenflächen jetzt wie folgt:
Für den Backbuffer: CreateCompatibleDC CreateCompatibleBitMap (Beides from DesktopDC) erstelle dann ein TGPGraphics vom neuen DC und benutze am ende BitBlt um das Endresultat aufs Fenster zu kriegen. Bin jetzt wieder bei 3% |
AW: TGPGraphic mit Zwischenbuffer aktualisiert sich nicht
Ich verwende GDI+ auch zum zeichen.
Aber wenn beim Form DoubleBuffer an ist, und keine Panels mit ParentBackground verwendet werden Flackert da nichts. Hier habe ich eine Unit gepostet in der ich auch GDI+ verwende (ohne Flackern) ![]() für das Zeichnen kann dann Graphics.SetSmoothingMode in der unit auch wieder aktiviert werden |
AW: TGPGraphic mit Zwischenbuffer aktualisiert sich nicht
Danke, werd ich mir mal angucken.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 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