Sign in Join
Wiki copytemporary

BGRABitmap tutorial 7/de: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11Dieses Tutorial zeigt, wie Sie Splines verwenden können.
22
33### Erzeugen Sie ein neues Projekt
44
55Erzeugen Sie ein neues Projekt und fügen Sie eine Referenz auf [[BGRABitmap/de|BGRABitmap]] hinzu, genau so wie im [[BGRABitmap tutorial/de|ersten Tutorial]].
66
77### Zeichnen Sie ein offenes Spline
88
99Im Objektinspektor fügen Sie einen OnPaint-Handler hinzu und schreiben Sie:
1010
1111``` pascal
1212procedure TForm1.FormPaint(Sender: TObject);
1313var
1414 image: TBGRABitmap;
1515 pts: array of TPointF;
1616 storedSpline: array of TPointF;
1717 c: TBGRAPixel;
1818
1919begin
2020 image := TBGRABitmap.Create(ClientWidth,ClientHeight,ColorToBGRA(ColorToRGB(clBtnFace)));
2121 c := ColorToBGRA(ColorToRGB(clWindowText));
2222
2323 //rechteckige Polylinie
2424 setlength(pts,4);
2525 pts[0] := PointF(50,50);
2626 pts[1] := PointF(150,50);
2727 pts[2] := PointF(150,150);
2828 pts[3] := PointF(50,150);
2929 image.DrawPolylineAntialias(pts,BGRA(255,0,0,150),1);
3030
3131 //berechnet die Splinepunkte und zeichnet sie als Polylinie
3232 storedSpline := image.ComputeOpenedSpline(pts);
3333 image.DrawPolylineAntialias(storedSpline,c,1);
3434
3535 image.Draw(Canvas,0,0,True);
3636 image.free;
3737end;
3838```
3939
4040Mit zwei Zeilen zeichnen Sie das Spline. Die erste Zeile berechnet die Splinepunkte und die zweite zeichnet sie. Beachte Sie, dass es eine besondere Funktion für offene Splines gibt.
4141
4242### Zeichnen Sie ein geschlossenes Spline
4343
4444Fügen Sie vor 'image.Draw' diese Zeilen ein:
4545
4646``` pascal
4747 for i := 0 to 3 do
4848 pts[i].x += 200;
4949 image.DrawPolylineAntialias(pts,BGRA(255,0,0,150),1);
5050
5151 storedSpline := image.ComputeClosedSpline(pts);
5252 image.DrawPolygonAntialias(storedSpline,c,1);
5353```
5454
5555Gehen Sie mit dem Textcursor auf den Bezeichner 'i' und drücken Sie Strg-Umsch-C, um die Variablendeklaration hinzuzufügen. Die Schleife durchläuft die Punkte der rechten Hälfte.
5656
5757Zwei neue Zeilen zeichnen ein geschlossenes Spline. Beachten Sie die besondere Funktion zum Berechnen geschlossener Splines und den Aufruf von 'DrawPolygonAntialias'.
5858
5959So vermeiden Sie, dass zum Speichern der Splinepunkte eine Variable benutzt wird:
6060
6161``` pascal
6262image.DrawPolygonAntialias(image.ComputeClosedSpline(pts),c,1);
6363```
6464
6565Allerdings können Sie dadurch die berechneten Punkte nicht mehrfach verwenden. Sie müssen bei jedem Einsatz neu berechnet werden.
6666
6767### Starten Sie das Programm
6868
6969Dies zeichnet zwei Splines, links ein offenes und rechts ein geschlossenes.
7070
71-<figure>
72-<img src="BGRATutorial7.png" title="BGRATutorial7.png" />
73-<figcaption>BGRATutorial7.png</figcaption>
74-</figure>
71+![](/wiki-images/8/84/BGRATutorial7.png)
7572
7673Beachten Sie, dass das Spline durch jeden Punkt geht. Wenn Sie wollen, dass die Kurve innen bleibt oder wenn Sie Tangenten definieren, dann brauchen Sie Kontrollpunkte. Diese stehen Ihnen bei Bézierkurven zur Verfügung.
7774
7875### Verwendung von Bézierkurven
7976
8077Fügen Sie vor 'image.Draw' diese Zeilen ein:
8178
8279``` pascal
8380 storedSpline := image.ComputeBezierSpline([BezierCurve(PointF(50,50),PointF(150,50),PointF(150,100)),
8481 BezierCurve(PointF(150,100),PointF(150,150),PointF(50,150))]);
8582 image.DrawPolylineAntialias(storedSpline,c,2);
8683```
8784
8885Die Funktion 'BezierCurve' definiert eine Kurve mit einem Anfangs- und einem Endpunkt und ein bis zwei Kontrollpunkten. Hier im Beispiel ist es nur ein Kontrollpunkt. Die Kontrollpunkte sind so definiert, dass die Kurve das vorher festgelegte Rechteck berührt.
8986
9087Ein Bézierspline ist einfach eine Folge von Bézierkurven. Deshalb hängt die Funktion 'ComputeBezierSpline' ein Array von Bézierkurven aneinander. Hier konstruieren wir eine nette U-Form mittels zweier Kurven.
9188
9289### Starten Sie das Programm
9390
9491Sie sehen eine fette Bézierkurve innerhalb des linken Rechtecks.
9592
96-<figure>
97-<img src="BGRATutorial7b.png" title="BGRATutorial7b.png" />
98-<figcaption>BGRATutorial7b.png</figcaption>
99-</figure>
93+![](/wiki-images/a/aa/BGRATutorial7b.png)
10094
10195[[BGRABitmap tutorial 6/de|Voriges Tutorial (Linienarten)]] \| [[BGRABitmap tutorial 8/de|Nächstes Tutorial (Texturen)]]
10296
10397---
10498*From the Free Pascal wiki, page "BGRABitmap tutorial 7/de", as it stood on 2020-02-10 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history