[英]Delphi drawing a smooth pie
有人在Delphi中有用於在畫布上繪制平滑派的代碼嗎?
我在網上只能找到平滑線條的示例,但這對我沒有多大幫助。我也考慮過Gr32,但是對於我所需要的,它為我的應用程序增加了很大的空間。 我只需要在畫布上畫一個填充的餅,看起來不像默認情況下那樣糟糕
Canvas.Pie(X1, Y1, X2, Y2, X3, Y3, X4, Y4);
我使用Delphi XE,所以沒有Firemonkey ...
根據您的建議@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測試
要進行抗鋸齒繪制,可以使用: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的占用空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.