uses
BGRABitmap, BGRABitmapTypes, BGRAPath,
BGRATransform;
procedure TForm1.Button1Click(Sender: TObject);
var
bmp, bmptmp: TBGRABitmap;
path: TBGRAPath;
ms: TMemoryStream;
bmptranform: TBGRAAffineBitmapTransform;
begin
bmp := TBGRABitmap.Create(200, 200);
bmp.FontHeight := 24;
bmp.FontAntialias := True;
bmp.EllipseAntialias(bmp.Width/2, bmp.Height/2, 90, 90, clRed, 2);
bmp.EllipseAntialias(bmp.Width/2, bmp.Height/2, 56, 56, clRed, 2);
path := TBGRAPath.Create;
path.arc(bmp.Width/2, bmp.Height/2, 88, Pi, 0, False);
bmp.TextOutCurved(path, 'POST OFFICE', clRed, taCenter, 0);
path.Free;
bmp.TextOut(bmp.Width/2 - 80, bmp.Height/2, '★', clRed);
bmp.TextOut(bmp.Width/2 + 60, bmp.Height/2, '★', clRed);
path := TBGRAPath.Create;
path.arc(bmp.Width/2, bmp.Height/2 - 36, 90, Pi, 0, True);
bmp.TextOutCurved(path, 'POLAND', clRed, taCenter, 0);
path.Free;
bmp.FontHeight := 16;
bmp.TextRect(Rect(bmp.Width div 2 - 50, bmp.Height div 2 - 20, bmp.Width div 2 + 50, bmp.Height div 2 + 20),
FormatDateTime('yyyy-mm-dd', Now), taCenter, tlCenter, clRed);
//rotate
bmptmp := TBGRABitmap.Create(bmp.Width, bmp.Height, BGRAPixelTransparent);
bmptranform := TBGRAAffineBitmapTransform.Create(bmp);
bmptranform.Translate(-bmp.Width div 2, -bmp.Height div 2);
bmptranform.RotateDeg(45); //<-- angle
bmptranform.Translate(bmp.Width div 2, bmp.Height div 2);
bmptmp.Fill(bmptranform);
bmptranform.Free;
bmp.Assign(bmptmp);
bmptmp.Free;
ms := TMemoryStream.Create;
bmp.SaveToStreamAsPng(ms);
ms.Position := 0;
Image1.Picture.LoadFromStream(ms);
ms.Free;
bmp.Free;
end;