Difference between revisions of "BGRABitmap tutorial 7/de"

From Lazarus wiki
Jump to navigationJump to search
m (Text replace - "delphi>" to "syntaxhighlight>")
Line 12: Line 12:
  
 
Im Objektinspektor fügen Sie einen OnPaint-Handler hinzu und schreiben Sie:
 
Im Objektinspektor fügen Sie einen OnPaint-Handler hinzu und schreiben Sie:
<delphi>procedure TForm1.FormPaint(Sender: TObject);
+
<syntaxhighlight>procedure TForm1.FormPaint(Sender: TObject);
 
var
 
var
 
   image: TBGRABitmap;
 
   image: TBGRABitmap;
Line 37: Line 37:
 
     image.Draw(Canvas,0,0,True);
 
     image.Draw(Canvas,0,0,True);
 
     image.free;   
 
     image.free;   
end;</delphi>
+
end;</syntaxhighlight>
  
 
Mit 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.
 
Mit 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.
Line 44: Line 44:
  
 
Fügen Sie vor 'image.Draw' diese Zeilen ein:
 
Fügen Sie vor 'image.Draw' diese Zeilen ein:
<delphi>    for i := 0 to 3 do
+
<syntaxhighlight>    for i := 0 to 3 do
 
       pts[i].x += 200;
 
       pts[i].x += 200;
 
     image.DrawPolylineAntialias(pts,BGRA(255,0,0,150),1);
 
     image.DrawPolylineAntialias(pts,BGRA(255,0,0,150),1);
  
 
     storedSpline := image.ComputeClosedSpline(pts);
 
     storedSpline := image.ComputeClosedSpline(pts);
     image.DrawPolygonAntialias(storedSpline,c,1);</delphi>
+
     image.DrawPolygonAntialias(storedSpline,c,1);</syntaxhighlight>
  
 
Gehen 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.
 
Gehen 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.
Line 56: Line 56:
  
 
So vermeiden Sie, dass zum Speichern der Splinepunkte eine Variable benutzt wird:
 
So vermeiden Sie, dass zum Speichern der Splinepunkte eine Variable benutzt wird:
<delphi>image.DrawPolygonAntialias(image.ComputeClosedSpline(pts),c,1);</delphi>
+
<syntaxhighlight>image.DrawPolygonAntialias(image.ComputeClosedSpline(pts),c,1);</syntaxhighlight>
 
Allerdings können Sie dadurch die berechneten Punkte nicht mehrfach verwenden. Sie müssen bei jedem Einsatz neu berechnet werden.
 
Allerdings können Sie dadurch die berechneten Punkte nicht mehrfach verwenden. Sie müssen bei jedem Einsatz neu berechnet werden.
  
Line 70: Line 70:
  
 
Fügen Sie vor 'image.Draw' diese Zeilen ein:
 
Fügen Sie vor 'image.Draw' diese Zeilen ein:
<delphi>
+
<syntaxhighlight>
 
     storedSpline := image.ComputeBezierSpline([BezierCurve(PointF(50,50),PointF(150,50),PointF(150,100)),
 
     storedSpline := image.ComputeBezierSpline([BezierCurve(PointF(50,50),PointF(150,50),PointF(150,100)),
 
                                               BezierCurve(PointF(150,100),PointF(150,150),PointF(50,150))]);
 
                                               BezierCurve(PointF(150,100),PointF(150,150),PointF(50,150))]);
 
     image.DrawPolylineAntialias(storedSpline,c,2);  
 
     image.DrawPolylineAntialias(storedSpline,c,2);  
</delphi>
+
</syntaxhighlight>
  
 
Die 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.
 
Die 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.

Revision as of 13:55, 24 March 2012

Deutsch (de) English (en) español (es) français (fr)


Home | Tutorial 1 | Tutorial 2 | Tutorial 3 | Tutorial 4 | Tutorial 5 | Tutorial 6 | Tutorial 7 | Tutorial 8 | Tutorial 9 | Tutorial 10 | Tutorial 11 | Tutorial 12 | Tutorial 13 | Tutorial 14 | Tutorial 15 | Tutorial 16 | Edit

Dieses Tutorial zeigt, wie Sie Splines verwenden können.

Erzeugen Sie ein neues Projekt

Erzeugen Sie ein neues Projekt und fügen Sie eine Referenz auf BGRABitmap hinzu, genau so wie im ersten Tutorial.

Zeichnen Sie ein offenes Spline

Im Objektinspektor fügen Sie einen OnPaint-Handler hinzu und schreiben Sie:

procedure TForm1.FormPaint(Sender: TObject);
var
  image: TBGRABitmap;
  pts: array of TPointF;
  storedSpline: array of TPointF;
  c: TBGRAPixel;

begin
    image := TBGRABitmap.Create(ClientWidth,ClientHeight,ColorToBGRA(ColorToRGB(clBtnFace)));
    c := ColorToBGRA(ColorToRGB(clWindowText));

    //rechteckige Polylinie
    setlength(pts,4);
    pts[0] := PointF(50,50);
    pts[1] := PointF(150,50);
    pts[2] := PointF(150,150);
    pts[3] := PointF(50,150);
    image.DrawPolylineAntialias(pts,BGRA(255,0,0,150),1);

    //berechnet die Splinepunkte und zeichnet sie als Polylinie
    storedSpline := image.ComputeOpenedSpline(pts);
    image.DrawPolylineAntialias(storedSpline,c,1);

    image.Draw(Canvas,0,0,True);
    image.free;  
end;

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

Zeichnen Sie ein geschlossenes Spline

Fügen Sie vor 'image.Draw' diese Zeilen ein:

    for i := 0 to 3 do
      pts[i].x += 200;
    image.DrawPolylineAntialias(pts,BGRA(255,0,0,150),1);

    storedSpline := image.ComputeClosedSpline(pts);
    image.DrawPolygonAntialias(storedSpline,c,1);

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

Zwei neue Zeilen zeichnen ein geschlossenes Spline. Beachten Sie die besondere Funktion zum Berechnen geschlossener Splines und den Aufruf von 'DrawPolygonAntialias'.

So vermeiden Sie, dass zum Speichern der Splinepunkte eine Variable benutzt wird:

image.DrawPolygonAntialias(image.ComputeClosedSpline(pts),c,1);

Allerdings können Sie dadurch die berechneten Punkte nicht mehrfach verwenden. Sie müssen bei jedem Einsatz neu berechnet werden.

Starten Sie das Programm

Dies zeichnet zwei Splines, links ein offenes und rechts ein geschlossenes.

BGRATutorial7.png

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

Verwendung von Bézierkurven

Fügen Sie vor 'image.Draw' diese Zeilen ein:

    storedSpline := image.ComputeBezierSpline([BezierCurve(PointF(50,50),PointF(150,50),PointF(150,100)),
                                               BezierCurve(PointF(150,100),PointF(150,150),PointF(50,150))]);
    image.DrawPolylineAntialias(storedSpline,c,2);

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

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

Starten Sie das Programm

Sie sehen eine fette Bézierkurve innerhalb des linken Rechtecks.

BGRATutorial7b.png

Voriges Tutorial (Linienarten) | Nächstes Tutorial (Texturen)