有没有人有用于在Delphi中在画布上绘制平滑饼图的代码?
我在网上找到的只是流畅线条的例子,但这对我没有多大帮助...... 我也考虑过Gr32,但是对于我需要的东西,它为我的应用添加了相当大的足迹。 我只需要在画布上画一个填充的馅饼,它看起来不像默认的
那样糟糕mess1 => id_member, Message;
mess2 => id_member2, Message2;
...
我使用的是Delphi XE,所以没有Firemonkey ......
左侧的饼图是根据您的推荐@johan使用以下代码获得的:
Canvas.Pie(X1, Y1, X2, Y2, X3, Y3, X4, Y4);
由于
答案 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进行测试
答案 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的足迹了。