A simple example on the example of geometric paths (Path), working with regions is absolutely similar:
Const PolyPoints: Array[0..8] Of TGPPoint = ((x: 50 ; y: 50 ), (x: 100 ; y: 50 ), (x: 150 ; y: 100 ), (x: 100 ; y: 150 ), (x: 150 ; y: 200 ), (x: 100 ; y: 250 ), (x: 150 ; y: 300 ), (x: 100 ; y: 350 ), (x: 50 ; y: 350)); Cnt = 45; Var I: Integer; FGDIPlus: TGPGraphics; Pen: TGPPen; Path: TGPGraphicsPath; solidBrush: TGPSolidBrush; RMatr, TMatr: TGPMatrix; Begin FBitmap.SetSize(Width, Height); FGDIPlus := TGPGraphics.Create(FBitmap.Canvas.Handle); // Pen := TGPPen.Create(TGPColor.Create(255, 0, 0, 0), 1 / FGDIPlus.GetDpiX); Path := TGPGraphicsPath.Create; Path.AddPolygon(PolyPoints); TMatr := TGPMatrix.Create; TMatr.Translate(Width / 2, Height / 2); TMatr.Scale(-0.5, -0.5); Path.Transform(TMatr); RMatr := TGPMatrix.Create; RMatr.RotateAt(360 / Cnt, TGPPointF.Create(Width / 2, Height / 2)); For I := 0 To Cnt Do Begin solidBrush := TGPSolidBrush.Create(TGPColor.Create(255 - I * (255 Div Cnt), 255 - I * (255 Div Cnt), I * (255 Div Cnt), 0)); FGDIPlus.FillPath(SolidBrush, Path); FGDIPlus.DrawPath(Pen, Path); solidBrush.Free; // Rgn.Transform(RMatr); Path.Transform(RMatr); End; RMatr.Free; TMatr.Free; Path.Free; Pen.Free; End;