Laden...

Zeichnen von Linien beschleunigen

Erstellt von Gimmick vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.686 Views
G
Gimmick Themenstarter:in
154 Beiträge seit 2015
vor 5 Jahren
Zeichnen von Linien beschleunigen

Hallo,

um in meinem Programm ein Bild in einer PictureBox Zoomen und Verschieben zu können, habe ich eine PictureBox mit PictureBoxSizeMode.StrechImage in ein Panel mit AutoScroll= true gepackt.

Beim Zoom ändere ich dann die Größe der PictureBox und Bild wird passend skaliert.

Zusätzlich zeichne ich über das Paint-Event der PictureBox Linien - e.Graphics.DrawLine(pen, point1, point2) - in die PictureBox.
Die über den Skalierungsfaktor ändere ich dann beim Zoom die Koordianten der Punkte entsprechend.

Das funktioniert auch, hat aber die Unschönheit, dass beim Zoom die Linien sichtbar einen Ticken der PictureBox hinterherhinken. Das Ergbenis ist also nicht so flüssig, wie ich das gerne hätte.

Das PaintEvent:


private void PictureBox_Paint(object sender, PaintEventArgs e)
        {
            //e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
            //e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            foreach (var line in Lines)
            {
                var color = Color.Red;
                var pen = new Pen(color, 2);
                e.Graphics.DrawLine(pen, line.StartPoint, line.EndPoint);

            }
        }

Gibt es da evtl. bessere Methoden, um verschiebbare Linien zu zeichnen?

G
Gimmick Themenstarter:in
154 Beiträge seit 2015
vor 5 Jahren

Danke,

das Zeichnen direkt ins Bild fällt in meinem Fall weg, ich möchte unabhängig von der Bildauflösung arbeiten.

Nur den Bereich neu zeichnen, der die Graphics-Elemente enthält würde auch nur selten was bringen, ich zeichne Rechtecke, Kreise oder Polygone, derren umschließendes Rechteck dann doch wieder in etwa der Größe der PictureBox entspricht.

Das Problem tritt ja auch nur beim Skalieren auf, weil ich den Zoom über die Skalierung des Controls "fälsche".
Fluffig würde es wohl laufen, wenn ich nur das Bild ändere und nicht das Control. Dann muss ich aber den ganzen Scroll-Balken-Kram selber schreiben und immer nur den Bildausschnitt in die PictureBox schreiben, der sich aus Zoom und Scroll-Position ergibt 🤔.