New version of BGRABitmap (9.6)
- Improvement of SVG rendering (gradients, line styles, fill modes)
- Minor bug fixes
https://github.com/bgrabitmap/bgrabitmap/releasesMany thanks to phoenixfenix and lainz for their help.
Phoenixfenix did the class structure to implement gradients in SVG files.
In the BGRAControls package, Lainz made a component TBCSVGViewer to display an SVG file.
In BGRAControls, you will find a test program in the directory "test/svg_viewer".
If you want to display an SVG file by code, you can still refer to BGRABitmap "test/testcanvas2d" folder. It is as simple as:
uses BGRASVG;
var bmp: TBGRABitmap;
...
svg := TBGRASVG.Create;
svg.LoadFromFile('Amsterdammertje-icoon.svg');
svg.StretchDraw(bmp.Canvas2D, taCenter,tlCenter, 0,0,bmp.Width,bmp.Height);
svg.Free;
Radial gradients are now implemented in Canvas2D property:
function createRadialGradient(x0,y0,r0,x1,y1,r1: single; flipGradient: boolean=false): IBGRACanvasGradient2D; overload;
function createRadialGradient(p0: TPointF; r0: single; p1: TPointF; r1: single; flipGradient: boolean=false): IBGRACanvasGradient2D; overload;
function createRadialGradient(x0,y0,r0,x1,y1,r1: single; Colors: TBGRACustomGradient; flipGradient: boolean=false): IBGRACanvasGradient2D; overload;
function createRadialGradient(p0: TPointF; r0: single; p1: TPointF; r1: single; Colors: TBGRACustomGradient; flipGradient: boolean=false): IBGRACanvasGradient2D; overload;
You can of course use TBGRAGradientScanner that was improved as well:
procedure TForm1.BGRAVirtualScreen1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
var
c1,c2: TPointF;
r1,r2: single;
scan: TBGRAGradientScanner;
begin
//using screen center for first circle
c1.x := Bitmap.Width/2;
c1.y := Bitmap.Height/2;
r1 := min(Bitmap.Width,Bitmap.Height)/2;
//using mouse position for second circle
c2.x := mx;
c2.y := my;
r2 := r1/4;
scan := TBGRAGradientScanner.Create(c1, r1, c2, r2);
scan.SetGradient(CSSYellow, CSSGray);
Bitmap.Fill(scan, dmDrawWithTransparency);
scan.Free;
end;