12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- {
- Sample program by Ondrey Pokorny to demonstrate drawing modes of the TFPCustomCanvas:
- - opaque
- - alphablend
- - custom blending, using a callback (not-used in this case)
- }
- program FPCanvasAlphaDraw;
- uses FPImage, FPImgCanv, FPCanvas, FPReadPNG, FPWritePNG, Classes, SysUtils, freetype, ftFont;
- const
- cImageName: array[TFPDrawingMode] of string = ('opaque', 'alphablend', 'not-used');
- var
- xNew, xImage: TFPMemoryImage;
- xCanvas: TFPImageCanvas;
- xDrawingMode: TFPDrawingMode;
- xRect: TRect;
- begin
- ftFont.InitEngine;
- xNew := nil;
- xCanvas := nil;
- xImage := nil;
- try
- xImage := TFPMemoryImage.Create(0, 0);
- xImage.LoadFromFile('edit-clear.png');
- for xDrawingMode := dmOpaque to dmAlphaBlend do
- begin
- xNew := TFPMemoryImage.Create(200, 200);
- xCanvas := TFPImageCanvas.Create(xNew);
- xCanvas.DrawingMode := xDrawingMode;
- xCanvas.Pen.Style := psClear;
- xCanvas.Brush.FPColor := colRed;
- xCanvas.FillRect(0, 0, xNew.Width, xNew.Height);
- // draw semi-transparent objects
- xCanvas.Brush.FPColor := FPColor($FFFF, $FFFF, $FFFF, $8000);
- xRect := Rect(0, 0, 50, 50);
- xCanvas.Ellipse(xRect);
- xRect.Offset(50, 0);
- xCanvas.Rectangle(xRect);
- xRect := Rect(0, 50, 50, 100);
- xCanvas.Pen.Style := psSolid;
- xCanvas.Pen.FPColor := FPColor($FFFF, $FFFF, $FFFF, $8000);
- xCanvas.Pen.Width := 4;
- xCanvas.Brush.Style := bsClear;
- xCanvas.Ellipse(xRect);
- xRect.Offset(50, 0);
- xCanvas.Rectangle(xRect);
- xRect.Offset(50, 0);
- xCanvas.Polyline([
- Point(xRect.CenterPoint.X, xRect.Top),
- Point(xRect.Right, xRect.CenterPoint.Y),
- Point(xRect.CenterPoint.X, xRect.Bottom),
- Point(xRect.Left, xRect.CenterPoint.Y),
- Point(xRect.CenterPoint.X, xRect.Top)]);
- xRect.Offset(50, 0);
- xCanvas.MoveTo(xRect.TopLeft);
- xCanvas.LineTo(xRect.Right, xRect.Top);
- xRect := Rect(0, 100, 50, 150);
- xCanvas.Draw(xRect.Left, xRect.Top, xImage);
- xRect.Offset(50, 0);
- xCanvas.StretchDraw(xRect.Left, xRect.Top, xRect.Width, xRect.Height, xImage);
- xRect := Rect(0, 150, 50, 200);
- xCanvas.Font:=TFreeTypeFont.Create;
- xCanvas.Font.FPColor := FPColor($FFFF, $FFFF, $FFFF, $8000);
- xCanvas.Font.Name := 'DejaVuLGCSans.ttf';
- xCanvas.Font.Size := 15;
- (xCanvas.Font as TFreeTypeFont).AntiAliased := True;
- xCanvas.TextOut(xRect.Left, xRect.CenterPoint.Y, 'Hello');
- xRect.Offset(100, 0);
- (xCanvas.Font as TFreeTypeFont).AntiAliased := False;
- xCanvas.TextOut(xRect.Left, xRect.CenterPoint.Y, 'Hello');
- xNew.SaveToFile(cImageName[xDrawingMode]+'.png');
- xCanvas.Font.Free;
- xCanvas.Font := nil;
- FreeAndNil(xNew);
- FreeAndNil(xCanvas);
- end;
- finally
- xCanvas.Free;
- xNew.Free;
- xImage.Free;
- end;
- end.
|