BGRABitmap tutorial 7

From Lazarus wiki
Revision as of 11:55, 1 April 2011 by Circular (talk | contribs) (lighter)
Jump to navigationJump to search

This tutorial shows how to use splines.

Create a new project

Create a new project and add a reference to BGRABitmap, the same way as in the first tutorial.

Draw an opened spline

With the object inspector, add an OnPaint handler and write : <delphi>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));
   //rectangular polyline
   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);
   //compute spline points and draw as a polyline
   storedSpline := image.ComputeOpenedSpline(pts);
   image.DrawPolylineAntialias(storedSpline,c,1);
   image.Draw(Canvas,0,0,True);
   image.free;  

end;</delphi>

There are two lines that draw the spline. The first line computes the spline points, and the second draw them. Notice that it is a specific function for opened splines.

Draw a closed spline

Before image.Draw, add these lines : <delphi> 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);</delphi>

Go with the text cursor on the 'i' identifier and press Ctrl-Shift-C to add the variable declaration. The loop offsets the points to the right.

Two new lines draw a closed spline. Notice the specific function that computes closed splines and the call to DrawPolygonAntialias.

You can avoid using a variable to store spline points like this : <delphi>image.DrawPolygonAntialias(image.ComputeClosedSpline(pts),c,1);</delphi> However, if you do so, you cannot use the computed points more than once, they must be calculated each time you use them.

Run the program

This should draw a rectangle with a wide black pen.

BGRATutorial7.png

Previous tutorial (line style)