PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C# + .NET + GDI -> Ausgabe beschleunigen


Metzler
2005-09-15, 14:08:34
Ahoi,

Ich schreib grad an einer Software (erstellung von diversen Graphen), die im optimalen Fall 40 mal die Sekunde geupdatet werden soll. Jetzt ist das Problem, dass die Bitmap des Graph grade bei hohen Auflösungen entsprechend groß ist (meinem Laptop ca. 1400 * 850). Ich bemühe mich eh schon, den Graph nur in Ausnahmefällen komplett neu zu zeichnen und trotzdem ist es schei*** langsam :(
Gibt es irgendwelche Möglichkeiten, den Prozess zu beschleunigen?
Dargestellt wird die Bitmap in einer PictureBox...

Gruß und Danke

Metzler

Metzler
2005-09-15, 17:14:24
Hab selbst noch einige Veränderungen vorgenommen und Performancegewinne erzielen können.
Nichts desto trotz: Gibt es ein paar generelle Tips, wie man die GDI möglichst schnell macht?

Shink
2005-09-15, 17:41:43
Muss es denn GDI sein? Käme eventuell DirectDraw (siehe z.B. http://www.c-sharpcorner.com/Code/2002/April/SpaceBreakOutMJ.asp) in Frage?
Auf wieviele Frames/Second kommst du? (25 fps sollten ja eigentlich auch schon schön flüssig aussehen, oder?)

Metzler
2005-09-15, 17:48:42
Habe ich auch schon drüber nachgedacht, da das Projekt aber inzwischen fast zu weit fortgeschritten ist, fällt es wohl ins Wasser. Mal schauen...
Erstmal will ich bei GDI bleiben...

Coda
2005-09-15, 17:53:34
Du zeichnest ja hoffentlich schon in einen Offscreen Buffer?

Metzler
2005-09-15, 17:57:11
Jup.

Demirug
2005-09-15, 19:59:16
Mit welchen Zeichenfunktionen arbeitestet du denn?

Metzler
2005-09-16, 00:17:32
Momentan benutze ich Graphics.DrawLine für die Skala als solche.
Graphics.DrawString für Informationen.
Und für die Graphenfunktion selbst nehme ich Graphics.DrawCurve, da ich eine Menge an Punkten habe und die Linie einigermaßen kurvig sein soll.
Alles wird erstmal in den Offscreenbuffer gezeichnet (nach Möglichkeit nur ein Teil, in Ausnahmefällen immer der komplette Graph) und diese neu gezeichneten Regionen dann auf das PictureBox.Image kopiert. Anschließend ruf ich auf der PictureBox Invalidate(Rectangle...) für die neu gezeichneten Regionen auf, damit die Änderungen auch sichtbar werden. Ich überleg grad, ob ich mir in dem Fall nicht den Offscreenbuffer fast sparen könnte...