德尔福绘制了一个光滑的馅饼

时间:2016-04-28 22:14:32

标签: delphi canvas drawing

有没有人有用于在Delphi中在画布上绘制平滑饼图的代码?

我在网上找到的只是流畅线条的例子,但这对我没有多大帮助...... 我也考虑过Gr32,但是对于我需要的东西,它为我的应用添加了相当大的足迹。 我只需要在画布上画一个填充的馅饼,它看起来不像默认的

那样糟糕
mess1 => id_member, Message;
mess2 => id_member2, Message2;
...

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

修改 enter image description here

左侧的饼图是根据您的推荐@johan使用以下代码获得的:

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

由于

2 个答案:

答案 0 :(得分:3)

这可以通过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进行测试

output

答案 1 :(得分:1)

要绘制消除锯齿,您可以使用:synopse gdiplus库,请参阅:http://synopse.info/fossil/wiki?name=GDI%2B

以下是一个例子:

implementation

uses 
  SynGDIPlus;  //provides gdip (see below)

procedure TForm1.FormResize(Sender: TObject);
var Bmp: TBitmap;
    MF: TMetaFile;
    MetafileCanvas: TMetafileCanvas;
begin
  MF := TMetaFile.Create;
  MF.Width := 300;
  MF.Height := 200;

  MetafileCanvas := TMetafileCanvas.Create(MF, 0);
  MetafileCanvas.Brush.Color := clRed;
  MetafileCanvas.Brush.Style := bsDiagCross;
  MetafileCanvas.Pie(0,0,50, 50, 300,50, 200,50);
  MetafileCanvas.Free;

  Bmp := Gdip.DrawAntiAliased(MF);
  Image1.Picture.Assign(Bmp);
  Bmp.Free;
  //Image1.Picture.Assign(MF);

  MF.Free;
end;

使用此装置,您只能拉入该装置,仅此而已 您不必使用图元文件,也可以直接绘制到DC,但是内部SynGDIPlus会使用图元文件。

更快的替代
如果性能问题,Graphics32库会更快 http://graphics32.org/wiki/

我认为你太担心graphics32的足迹了。