我正在嘗試使用下一個制作圓形影像:
var
bmp: TBitmap;
Rgn: HRGN;
R: TRect;
...
R := Image1.ClientRect;
bmp := TBitmap.Create;
bmp.Assign(Graph);
bmp.Canvas.StretchDraw(Image1.ClientRect, Image1.Picture.Graphic);
Rgn := CreateRoundRectRgn(0, 0, Image1.Width, Image1.Height, Image1.Width, Image1.Height);
Image1.Picture.Assign(nil);
Image1.AutoSize := false;
Image1.Stretch := false;
Image1.Height := R.Bottom - R.Top;
Image1.Width := R.Right - R.Left;
Image1.Canvas.Brush.Color := clRed;
Image1.Canvas.FillRect(Image1.ClientRect);
SelectClipRgn(Image1.Canvas.Handle, Rgn);
Image1.Canvas.Draw(0, 0, bmp);
DeleteObject(rgn);
Image1.Canvas.Brush.Style := bsClear;
Image1.Picture.Bitmap.TransparentColor := clRed;
Image1.Picture.Bitmap.Transparent := True;
Image1.Transparent := True;
bmp.Free;
但結果并不令人滿意,因為邊緣出現鋸齒狀且不平滑。

怎樣才能使這些邊緣光滑?
uj5u.com熱心網友回復:
我找到了這種處理問題的方法,希望它能幫助其他人:
var
GPGraph: TGPGraphics;
GPen: TGPPen;
GRect: TGPRect;
...
GRect := MakeRect(0, 0, Image1.Width-2, image1.Height-2);
GPGraph := TGPGraphics.Create(image1.Canvas.Handle);
GPGraph.SetSmoothingMode(SmoothingModeAntiAlias);
GPen := TGPPen.Create(aclWhite, 2);
GPen.SetStartCap(LineCapRound);
GPen.SetEndCap(LineCapRound);
GPGraph.DrawArc(GPen, 0, 0, Image1.Width-2, image1.Height-2, 0, 360) ;
GPen.Free;
GPGraph.Free;

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/513254.html
標籤:图片德尔福gdi
上一篇:如何配置AndroidRSA密鑰生成(或密鑰使用),使其像DelphiTurboPowerLockbox2RSA密鑰生成/使用一樣作業?
