Entwickler-Ecke
Multimedia / Grafik - DrawLine nur Teil neu zeichnen!
chrizstone - Fr 12.08.11 11:39
Titel: DrawLine nur Teil neu zeichnen!
Hi Leute, villeicht kann mir eienr von euch helfen! Und zwar zeichne ich mir in eine PictureBox eine Kurve die aus mehreren Punkten besteht über eine Länge von 1000000...Bei dieser Länge kommt es bei jedem Scrollen zu Rucklern und aussetzern...Es muss doch auch irendwie möglich sein beim scrollen immer nur den gerade sichtbaren teil der picturebox neu zu zeichen oder?
Th69 - Fr 12.08.11 12:15
Hallo chrizstone,
wenn du kein Image anzeigen willst, sondern alles selber zeichnest, dann verwende besser ein Panel (anstatt der PictureBox) als Zeichenfläche.
Was meinst du mit 1000000? Zeichnest du etwa 1 Million verschiedene Linien?
Intern wird beim Scrollen schon das Clipping beachtet, d.h. nur die sichtbaren Bereiche gezeichnet.
Wenn es dir um die Aktualisierung nach Hinzufügen eines Punktes/Linie geht, dann kannst du dafür die Invalidate(Rectangle)-Methode benutzen, d.h. du übergibst nur das neu zu zeichnende Rechteck (anstatt daß bei Invalidate() alles neu gezeichnet wird).
Und wenn es wirklich so viele Punkte/Linien sind, dann wäre es besser du würdest intern alles in eine eigene Bitmap zeichnen und diese dann einfach im Paint-Ereignis mittels DrawImage() zeichnen.
chrizstone - Fr 12.08.11 13:08
Hi,
also mit einem Panel habe ich es schon versucht, aber da hat es noch mehr geruckelt deswegen die PictureBox! Also mit 1000000 meine ich z.B das eine Linie von Point(0,0) bis Point(0,1000000) verläuft! Und diese Linie wird natürlich so wie es bei mir jetzt ist immer neu gezeichnet bei jedem scrollen!
Was genau meinst du mit Rectangle? Meine DrawMethode sieht bis jetzt so aus:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; drawObj.Draw(e.Graphics); DrawC.Draw(e.Graphics); helpLines.DrawMiddle(e.Graphics); helpLines.DrawLeft(e.Graphics); helpLines.DrawRight(e.Graphics); e.Dispose();
} |
Dr. Hallo - Sa 13.08.11 00:49
warum killst Du die EventArgs ?
Das brauchst du nicht tun, denn das übernimmt der Framework selbstständig.
Damit kannst du u.U. (m.A.n.) die ganze Anwendung zum Absturz bringen .
chrizstone - Di 23.08.11 14:33
Stimmt Dr. Hallo da hast du Recht...habe ich schon geändert! Aber dies löst ja auch nicht mein eigentliches Problem!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!