Heim > Web-Frontend > PS-Tutorial > Hauptteil

Bei der Knotenkurve kann die Maus den Knoten ziehen, um die Kurve anzupassen, ähnlich wie in Photoshop

高洛峰
Freigeben: 2017-02-20 09:50:01
Original
3230 Leute haben es durchsucht

Eine der am häufigsten verwendeten Funktionen in Photoshop ist die Kurvenanpassung, wie in der Abbildung gezeigt.

Bei der Knotenkurve kann die Maus den Knoten ziehen, um die Kurve anzupassen, ähnlich wie in Photoshop

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:

  1. Die Kurve wird durch eine Menge von dargestellt Punktknoten

  2. Das Bewegen des Knotens mit der Maus ändert tatsächlich einen einzelnen Punkt

  3. Punkt einfügen und löschen

  4. Ein Knoten ist ein Griff, es ist nur ein kleines Quadrat

  5. Zeichnen Sie eine Kurve, die durch alle Knoten in Paint DrawCurve verläuft

  6. Zeichnen ein Fadenkreuz zur Darstellung des aktuellen Knotens

  7. 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

  8. Die Maus wird gedrückt und verschoben. Wenn ein Knoten vorhanden ist, sind die Knotenkoordinaten die Mauskoordinaten

  9. Zeichnung aktualisieren

Abgeschlossene Demonstration der Programmbedienung (Animation):

Bei der Knotenkurve kann die Maus den Knoten ziehen, um die Kurve anzupassen, ähnlich wie in Photoshop

Das Folgende ist Teil des Beispielcodes:

Knoten:


 List<point> points;</point>
Nach dem Login kopieren


Knotengriffe zeichnen:

Rectangle getHandle(Point p)
{
    Rectangle rect = new Rectangle(
        p.X - 3,
        p.Y - 3,
        6,
        6);
    return rect;
}
Nach dem Login kopieren
判断某点是否位于手柄区域:
Nach dem Login kopieren
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;
}
Nach dem Login kopieren
注意这个部分可以适当放大一下判断区域,这样便于鼠标操作(手柄太小,不易点击)。
Nach dem Login kopieren

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));
}
Nach dem Login kopieren

Kurven zeichnen:

 void drawCurve(Graphics g)
 {
     g.DrawCurve(Pens.Black, points.ToArray());
 }
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

Mausziehen:

protected override void OnMouseMove(MouseEventArgs e)
{
    mousePoint = e.Location;
    if (mouseDown)
    {
        if (Current != null)
        {
            Current = mousePoint;
        }
        Refresh();
    }
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!