有人在Delphi中有用于在画布上绘制平滑派的代码吗?

我在网上能找到的只是平滑线条的例子,但这对我没有太大帮助。
我也考虑过Gr32,但是对于我所需要的,它为我的应用程序增加了很大的空间。
我只需要在画布上画一个填充的饼,看起来不像默认情况下那样糟糕

Canvas.Pie(X1, Y1, X2, Y2, X3, Y3, X4, Y4);


我使用Delphi XE,所以没有Firemonkey ...

编辑
delphi - 德尔福画一个光滑的馅饼-LMLPHP

根据您的建议@johan,使用以下代码获取左侧的饼图:

procedure TForm1.Button4Click(Sender: TObject);
var
    Center:TPoint;
    Radius:integer;
    Bmp: TBitmap;
    MF: TMetaFile;
    MetafileCanvas: TMetafileCanvas;
begin
  MF := TMetaFile.Create;
  MF.Width := 150;
  MF.Height := 150;

  MetafileCanvas := TMetafileCanvas.Create(MF, 0);
  MetafileCanvas.Pen.Color := clRed;
  MetafileCanvas.Brush.Color := clRed;
  MetafileCanvas.Brush.Style := bsSolid;
  MetafileCanvas.Pie(0,0,150, 150, 150,50, 150,50);

  MetafileCanvas.Free;

  Bmp := Gdip.DrawAntiAliased(MF);
  Image2.Picture.Assign(Bmp);
  Bmp.Free;
  MF.Free;
end;


谢谢

最佳答案

使用GDI +可以很容易地做到这一点。密钥正在使用SmoothingModeAntiAlias

uses GDIPAPI, GDIPOBJ;

procedure TForm1.FormPaint(Sender: TObject);
var
  g: TGPGraphics;
  p: TGPPen;
  b: TGPBrush;
  r: TGPRect;
begin
  r := MakeRect(10, 10, ClientWidth - 20, ClientHeight - 20);
  g := TGPGraphics.Create(Canvas.Handle);
  g.SetSmoothingMode(SmoothingModeAntiAlias);
  b := TGPSolidBrush.Create(aclGreen);
  p := TGPPen.Create(aclRed, 1);
  g.FillPie(b, r, 45, 90);
  g.DrawPie(p, r, 45, 90);
  b.Free;
  p.Free;
  g.Free;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  Invalidate;
end;


经过Delphi5测试

delphi - 德尔福画一个光滑的馅饼-LMLPHP

10-04 14:48