델파이 2007에서 원형 진행률 막대를 개발해야하는데 제 3 자 구성 요소 (회사 정책)를 사용할 수 없습니다. Canvas를 사용하여 호를 그립니다. 정상적으로 작동하지만 이미지의 해상도가 매우 낮습니다. 캔버스 드로잉의 해상도를 향상시킬 수 있습니까?델파이 : 고해상도 아크 그리기
코드 샘플 :
procedure TForm1.DrawPieSlice(const Canvas: TCanvas; const Center: TPoint;
const Radius: Integer; const StartDegrees, StopDegrees: Double);
//Get it in http://delphidabbler.com/tips/148
const
Offset = 90;
var
X1, X2, X3, X4: Integer;
Y1, Y2, Y3, Y4: Integer;
begin
X1 := Center.X - Radius;
Y1 := Center.Y - Radius;
X2 := Center.X + Radius;
Y2 := Center.Y + Radius;
X4 := Center.X + Round(Radius * Cos(DegToRad(Offset + StartDegrees)));
Y4 := Center.y - Round(Radius * Sin(DegToRad(Offset + StartDegrees)));
X3 := Center.X + Round(Radius * Cos(DegToRad(Offset + StopDegrees)));
Y3 := Center.y - Round(Radius * Sin(DegToRad(Offset + StopDegrees)));
Canvas.Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4);
end;
procedure TForm1.SpinEdit1Change(Sender: TObject);
var
Center: TPoint;
Bitmap: TBitmap;
Radius: Integer;
p: Pointer;
begin
Label1.Caption:= SpinEdit1.Text+'%';
Bitmap := TBitmap.Create;
try
Bitmap.Width := Image1.Width;
Bitmap.Height := Image1.Height;
Bitmap.PixelFormat := pf24bit;
Bitmap.HandleType := bmDIB;
Bitmap.ignorepalette := true;
Bitmap.Canvas.Brush.Color := clBlack;
Bitmap.Canvas.Pen.Color := clHighlight;
Bitmap.Canvas.Pen.Width := 10;
Center := Point(Bitmap.Width div 2, Bitmap.Height div 2);
Radius := 61;
DrawPieSlice(Bitmap.Canvas, Center, Radius,0,round(SpinEdit1.Value * -3.6));
Image1.Picture.Graphic := Bitmap;
finally
Bitmap.Free;
end;
end;
결과 :
내가 다른 솔루션을위한 제안에 열려입니다.
해상도는 사용자가 결정합니다. 해상도를 더 높이려면 원을 더 크게 만듭니다. 정말로 당신이 안티 앨리어싱을 원한다면 현실적으로 graphics32 또는 gdi +로 전환해야합니다. 회사 내부 정책에 위배되는 경우에는 직접 앤티 앨리어싱을 작성하는 방법을 배워야합니다. –