2 Stimmen

C# Punkte in größenveränderbarem Bild zeichnen

Ich schreibe einfache C#-Anwendung zum Anzeigen von Karten. Karten sind JPG-Bilder mit einer Größe von etwa 1000x1000 oder so ähnlich und kann proportional geändert werden. Ich habe eine Reihe von Punkten Koordinaten (x,y) und Namen. Der Viewer ist eine Windows-Form-Anwendung mit einem Kontrollfeld und einer PictureBox darin. PictureBox hat das Attribut SizeBox=AutoSize . Ich verwende einen solchen Ansatz für die Platzierung von Punkten auf der Karte (PictureBox).

Graphics g = Graphics.FromHwnd(pictureBox.Handle);
SolidBrush redBrush = new SolidBrush(Color.Red);
g.FillEllipse(redBrush, x, y, 7, 7);

Nach dem Scrollen oder der Größenänderung des Formulars sind alle Punkte verschwunden. Wenn ich Punkte auf Paint-Ereignis zeichnen habe ich große Probleme mit der Leistung. Wie kann man dieses Problem lösen?

1voto

Stephan B Punkte 3621

Um die Leistung zu verbessern, versuchen Sie, nur das zu zeichnen, was gerade sichtbar ist. Die beste Methode wäre, die PictureBox wegzulassen und nur zwei Scrollbars (oder etwas anderes, das wie eine PictureBox scrollen kann) zu verwenden und die Karte und die Punkte nur für den kleinen Teil zu zeichnen, der sichtbar ist. Bevor Sie das tun, versuchen Sie, die Punkte in die PictureBox zu zeichnen, wenn diese in der Größe verändert oder gescrollt wird, und prüfen Sie, welche Punkte im sichtbaren Bereich liegen.

Hinzugefügt: Vielleicht wäre es gut, wenn Sie Ihre Elemente in eine Kopie des JPGs zeichnen und diese in die PictureBox einfügen?

0voto

jv42 Punkte 8395

Sie sollten in der Lage sein, Ereignishandler für die verschiedenen Änderungspunkte Ihrer PictureBox (Sie erwähnten Scrollen und Größenänderung) einzuhängen. Dann können Sie Ihren Zeichencode in eine Methode einfügen, die von diesen Event-Handlern aufgerufen wird.

0voto

Ben Voigt Punkte 268424

WPF wäre wahrscheinlich eine bessere Wahl für diese. Es ist Hardware-beschleunigt, und wird alle Clipping und Zooming-Transformationen für Sie (Sie nur die entsprechenden Eigenschaften festgelegt) durchführen. Und Sie sollten in der Lage sein, den Überblick über die POI mit WPF-Elemente als gut zu halten, anstatt sie selbst zu zeichnen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X