BGRABitmap tutorial TAChart

From Lazarus wiki
Revision as of 20:34, 3 February 2013 by Circular (talk | contribs) (template language)
Jump to navigationJump to search

English (en) français (fr)
You can make beautiful charts using BGRABitmap.

BGRA rendering

First add the TAChartBGRA package. To render your chart, you can for example use a PaintBox. In the OnPaint event, write :

uses BGRABitmap, TADrawerBGRA;

procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  bmp: TBGRABitmap;
  id: IChartDrawer;
  rp: TChartRenderingParams;
begin
  bmp := TBGRABitmap.Create(PaintBox1.Width, PaintBox1.Height);
  Chart1.DisableRedrawing;
  try
    id := TBGRABitmapDrawer.Create(bmp);
    id.DoGetFontOrientation := @CanvasGetFontOrientationFunc;
    rp := Chart1.RenderingParams;
    Chart1.Draw(id, Rect(0, 0, PaintBox1.Width, PaintBox1.Height));
    Chart1.RenderingParams := rp;
    bmp.Draw(PaintBox1.Canvas, 0, 0);
  finally
    Chart1.EnableRedrawing;
    bmp.Free;
  end;
end;

chartbgra.png

To avoid flickering, consider using TBGRAVirtualScreen from BGRAControls.

Text effects

To add text effect, you need the latest version of BGRABitmap, and the latest SVN of Lazarus. There is a FontRenderer property in each TBGRABitmap image, that you can define. You must not free the renderer, as it is automatically freed by the image.

The text effects are provided by the BGRATextFX unit that contains the TBGRATextEffectFontRenderer class. To add a golden contour to the letters and a shadow, add the following lines :

uses BGRATextFX, BGRAGradientScanner;
...
var
  ...
  fontRenderer: TBGRATextEffectFontRenderer;
  gold: TBGRAGradientScanner;
begin
  ...
  fontRenderer:= TBGRATextEffectFontRenderer.Create;
  fontRenderer.ShadowVisible := true;     //adds a shadow
  fontRenderer.OutlineVisible := true;    //show the outline
  gold := TBGRAGradientScanner.Create(CSSGold,CSSGoldenrod,gtLinear,PointF(0,0),PointF(20,20),true,true);
  fontRenderer.OutlineTexture := gold;    //define the texture used for the outline
  fontRenderer.OuterOutlineOnly := true;  //just the outer pixels of the text
  bmp.FontRenderer := fontRenderer;       //gives the FontRenderer to the image (which becomes the owner of the renderer)
  ...
  gold.Free;
end;

chartbgrafonteffect.png