Ich versuche, eine Reihe von verbundenen Segmenten zu zeichnen, aber die gekrümmten Segmente scheinen ein Artefakt zu erzeugen, wobei die äußere Seite der Kurve überhaupt nicht glatt ist, sondern sehr gezackt. Dies ist Teil eines GIS-Programms, das ich mache.C# GDI + Kurve Zeichnung Problem
Für diese Zeilen muss die Zeile selbst ziemlich breit sein, da dies den Bereich der Daten darstellt, die in dieser Zeile für die GIS-Daten gesammelt werden können. Es muss auch einen Bereich direkt unter der Linie geben, in dem keine Daten gesammelt werden. Dies kann auch breit sein, aber nicht so breit wie die Hauptlinie.
Ich habe dies mit einem Grafikpfad gemacht, den ich dann erweitern und als eine Clipping-Region verwenden, um den Bereich direkt unter der Linie zu blockieren. Ich zeichne dann die tatsächliche Linie. Der folgende Beispielcode führt dies aus, mit zusammengesetzten Werten für die einfache Regenerierung.
Dies funktioniert gut mit geraden Linien, aber mit gekrümmten Linien gibt es sehr unregelmäßige Formen auf der Außenseite der Kurven. Ich habe keine Ahnung, warum das passiert.
Irgendwelche Ideen wäre sehr willkommen, beifall,
Greg
ich diesen Beispielcode machte eine Grundform mit einem picturebox und einen Knopf auf sie verwenden, wodurch dann, wenn ich auf die Schaltfläche geklickt würde es diese ausführen Methode:
private void drawCurvedLine()
{
//initialise the plot area:
Bitmap image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
pictureBox1.BackgroundImage = image;
Graphics g = Graphics.FromImage(image);
//the width of the pen represents the width of a sonar swathe:
Pen widePen = new Pen(new SolidBrush(Color.FromArgb(80, Color.Blue)), 50);
PointF[] points = new PointF[4];
//first straight:
points[0] = new PointF(287.284149F,21.236269F);
points[1] = new PointF(183.638443F,406.936249F);
//second straight:
points[2] = new PointF(130.842773F, 515.574036F);
points[3] = new PointF(-1950.91321F, 3491.868F);
//graphics path for the line:
GraphicsPath gPath = new GraphicsPath();
gPath.AddLine(points[0], points[1]);
gPath.AddArc(new RectangleF(-445.464447F,3.84924316F,640.067444F,640.067444F), -(90 - 105.0412369999982F), 10.8775282F);
gPath.AddArc(new RectangleF(-445.464417F, 3.84915161F, 640.067444F, 640.067444F), -(90 - 115.91811484539707F), 10.8775091F);
gPath.AddLine(points[2], points[3]);
//widen the line to the width equal to what the fish will not be able to see:
gPath.Widen(new Pen(Color.White, 10));
//now exclude that widened line from the main graphics:
g.ExcludeClip(new Region(gPath));
//draw the swathe line:
g.DrawPath(widePen, gPath);
//reset the clipping for the next line:
g.ResetClip();
}
möglich Duplikat [C# GDI + Kurve Zeichnung Problem] (http://stackoverflow.com/questions/4546297/c-gdi-curve-drawing-issue) –
Gute Idee, um etwas Code hinzuzufügen, aber Sie können _Bearbeiten Sie Ihre vorhandene Frage, anstatt eine neue Kopie zu veröffentlichen . –
Nebenbei bemerkt, Sie lecken Ressourcen. Die Stift-, Grafik- und Pfadobjekte sollten vor dem Verlassen dieser Methode disponiert werden. –