Eine der am häufigsten verwendeten Funktionen in Photoshop ist die Kurvenanpassung, wie in der Abbildung gezeigt.
Fügen Sie Kurvenknoten hinzu, löschen Sie sie und ziehen Sie sie mit der Maus, um das Bild anzupassen Parameter. Von der Idee her (hier wird nur die Kurve selbst betrachtet, die Datenspeicherung ist in dieser Liste nicht enthalten) ist diese Funktion relativ einfach:
Die Kurve wird durch eine Menge von dargestellt Punktknoten
Das Bewegen des Knotens mit der Maus ändert tatsächlich einen einzelnen Punkt
Punkt einfügen und löschen
Ein Knoten ist ein Griff, es ist nur ein kleines Quadrat
Zeichnen Sie eine Kurve, die durch alle Knoten in Paint DrawCurve verläuft
Zeichnen ein Fadenkreuz zur Darstellung des aktuellen Knotens
Bestimmen Sie beim Drücken der Maus, ob er sich in einem vorhandenen Knoten befindet. Wenn ja, markieren Sie ihn, andernfalls fügen Sie einen neuen Knoten hinzu
Die Maus wird gedrückt und verschoben. Wenn ein Knoten vorhanden ist, sind die Knotenkoordinaten die Mauskoordinaten
Zeichnung aktualisieren
Abgeschlossene Demonstration der Programmbedienung (Animation):
Das Folgende ist Teil des Beispielcodes:
Knoten:
List<point> points;</point>
Knotengriffe zeichnen:
Rectangle getHandle(Point p) { Rectangle rect = new Rectangle( p.X - 3, p.Y - 3, 6, 6); return rect; }
判断某点是否位于手柄区域:
bool isHandle(Point p) { foreach (Point pt in points) { if (isInside(p, getHandle(pt))) { downIndex = points.IndexOf(pt); downPoint = pt; current = pt; return true; } } return false; }
注意这个部分可以适当放大一下判断区域,这样便于鼠标操作(手柄太小,不易点击)。
Griffe zeichnen:
void drawHandle(Graphics g, Point p) { if (points.IndexOf(p) == downIndex) g.FillRectangle( Brushes.Black, getHandle(p)); else g.DrawRectangle( Pens.Black, getHandle(p)); }
Kurven zeichnen:
void drawCurve(Graphics g) { g.DrawCurve(Pens.Black, points.ToArray()); }
Kurven zeichnen verwendet die Kardinal-Spline-Zeichnungsmethode der Graphics-Klasse mit der Standardspannung von 0,5.
Kreuzpositionierungslinie zeichnen (Hilfsfunktion):
void drawCrosshair(Graphics g, Point p) { g.DrawLine( Pens.Gray, 0, p.Y, clientRect.Width, p.Y); g.DrawLine( Pens.Gray, p.X, 0, p.X, clientRect.Height); }
Mausziehen:
protected override void OnMouseMove(MouseEventArgs e) { mousePoint = e.Location; if (mouseDown) { if (Current != null) { Current = mousePoint; } Refresh(); } }
Mehr Kurven mit Knoten, die Maus kann die Knoten ziehen, um sie anzupassen Kurve, bitte beachten Sie die chinesische PHP-Website für ähnliche Artikel zum Thema Photoshop!