DrawLine(); DrawLines(); DrawArc(); DrawBezier(); DrawBeziers(); DrawRectangle(); DrawRectangles(); DrawEllipse(); DrawPie(); DrawPolygon(); DrawCurve(); DrawClosedCurve(); FillRectangle(); FillRectangles(); FillPolygon(); FillEllipse(); FillPie(); FillClosedCurve();
DrawLines、DrawPolygon、FillPolygon 测试图:

DrawLines、DrawPolygon、FillPolygon 测试代码:
uses GdiPlus; procedure TForm1.FormPaint(Sender: TObject); const Pts: array[0..3] of TGPPointF = ((X:20; Y:80), (X:60; Y:20), (X:100; Y:80), (X:60; Y:140)); var Graphics: IGPGraphics; Pen: IGPPen; Brush: IGPSolidBrush; Font: IGPFont; i: Integer; begin Graphics := TGPGraphics.Create(Handle); Pen := TGPPen.Create($FFFF0000, 2); Brush := TGPSolidBrush.Create($FF000000); Font := TGPFont.Create(Canvas.Handle); Graphics.DrawLines(Pen, Pts); for i := 0 to Length(Pts) - 1 do Graphics.DrawString(IntToStr(i), Font, Pts[i], Brush); Graphics.TranslateTransform(110, 0); Graphics.DrawPolygon(Pen, Pts); Brush.Color := $FFFFFF00; Graphics.TranslateTransform(110, 0); Graphics.FillPolygon(Brush, Pts); Graphics.TranslateTransform(110, 0); Graphics.FillPolygon(Brush, Pts); Graphics.DrawPolygon(Pen, Pts); end;
DrawRectangles、FillRectangles 测试图:

DrawRectangles、FillRectangles 测试代码:
uses GdiPlus; procedure TForm1.FormPaint(Sender: TObject); var Graphics: IGPGraphics; Pen: IGPPen; Brush: IGPSolidBrush; Rects: array[0..2] of TGPRect; begin Rects[0].Initialize(40, 20, 20, 20); Rects[1].Initialize(30, 40, 40, 40); Rects[2].Initialize(10, 80, 80, 80); Graphics := TGPGraphics.Create(Handle); Pen := TGPPen.Create($FFFF0000, 2); Brush := TGPSolidBrush.Create($FFC0C0C0); Graphics.DrawRectangles(Pen, Rects); Graphics.TranslateTransform(110, 0); Graphics.FillRectangles(Brush, Rects); Graphics.TranslateTransform(110, 0); Graphics.FillRectangles(Brush, Rects); Graphics.DrawRectangles(Pen, Rects); end;
DrawArc、DrawPie、FillPie 测试图:

DrawArc、DrawPie、FillPie 测试代码:
uses GdiPlus; procedure TForm1.FormPaint(Sender: TObject); var Graphics: IGPGraphics; Pen: IGPPen; Brush: IGPSolidBrush; Rect: TGPRect; begin Rect.Initialize(15, 15, 160, 80); Graphics := TGPGraphics.Create(Handle); Pen := TGPPen.Create($FFFF0000, 2); Brush := TGPSolidBrush.Create($FFB0C4DE); Graphics.FillEllipse(Brush, Rect); Graphics.DrawArc(Pen, Rect, 0, 45); Graphics.TranslateTransform(0, Rect.Y + Rect.Height); Graphics.FillEllipse(Brush, Rect); Graphics.DrawPie(Pen, Rect, 0, 45); Graphics.TranslateTransform(0, Rect.Y + Rect.Height); Graphics.FillEllipse(Brush, Rect); Brush.Color := $FFFFD700; Graphics.FillPie(Brush, Rect, 0, 45); Graphics.TranslateTransform(0, Rect.Y + Rect.Height); Brush.Color := $FFB0C4DE; Graphics.FillEllipse(Brush, Rect); Brush.Color := $FFFFD700; Graphics.FillPie(Brush, Rect, 0, 45); Graphics.DrawPie(Pen, Rect, 0, 45); end;
DrawCurve、DrawClosedCurve、FillClosedCurve 测试图:

DrawCurve、DrawClosedCurve、FillClosedCurve 测试代码:
uses GdiPlus;
const
Pts: array [0..5] of TGPPoint = (
(X: 10; Y: 40),
(X: 100; Y: 60),
(X: 150; Y: 20),
(X: 130; Y: 100),
(X: 70; Y: 80),
(X: 30; Y: 140));
procedure TForm1.FormPaint(Sender: TObject);
const
m = 180;
n = 160;
var
Graphics: IGPGraphics;
Pen: IGPPen;
BrushBak, Brush: IGPBrush;
begin
Graphics := TGPGraphics.Create(Handle);
Pen := TGPPen.Create($FFFF0000, 2);
BrushBak := TGPSolidBrush.Create($FFD8BFD8);
Brush := TGPSolidBrush.Create($FFFFD700);
with Graphics do
begin
FillPolygon(BrushBak, Pts);
DrawCurve(Pen, Pts);
TranslateTransform(m, 0);
FillPolygon(BrushBak, Pts);
DrawCurve(Pen, Pts, 1.5);
TranslateTransform(m, 0);
FillPolygon(BrushBak, Pts);
DrawCurve(Pen, Pts, 0.5);
TranslateTransform(m, 0);
FillPolygon(BrushBak, Pts);
DrawCurve(Pen, Pts, 0);
//
TranslateTransform(-Transform.OffsetX, 150);
FillPolygon(BrushBak, Pts);
DrawClosedCurve(Pen, Pts);
TranslateTransform(m, 0);
FillPolygon(BrushBak, Pts);
DrawClosedCurve(Pen, Pts, 1.5);
TranslateTransform(m, 0);
FillPolygon(BrushBak, Pts);
DrawClosedCurve(Pen, Pts, 0.5);
TranslateTransform(m, 0);
FillPolygon(BrushBak, Pts);
DrawClosedCurve(Pen, Pts, 0);
//
TranslateTransform(-Transform.OffsetX, n);
FillPolygon(BrushBak, Pts);
FillClosedCurve(Brush, Pts);
DrawClosedCurve(Pen, Pts);
TranslateTransform(m, 0);
FillPolygon(BrushBak, Pts);
FillClosedCurve(Brush, Pts, FillModeAlternate, 1.5);
DrawClosedCurve(Pen, Pts, 1.5);
TranslateTransform(m, 0);
FillPolygon(BrushBak, Pts);
FillClosedCurve(Brush, Pts, FillModeAlternate, 0.5);
DrawClosedCurve(Pen, Pts, 0.5);
TranslateTransform(m, 0);
FillPolygon(BrushBak, Pts);
FillClosedCurve(Brush, Pts, FillModeAlternate, 0);
DrawClosedCurve(Pen, Pts, 0);
end;
end;
DrawBezier 测试图:

DrawBezier 测试代码:
uses GdiPlus; //一条 Bezier 线需要四个点: 两个端点、两个控制点 procedure TForm1.FormPaint(Sender: TObject); var Graphics: IGPGraphics; Pen: IGPPen; P1,C1,C2,P2: TGPPoint; begin P1.Initialize(30, 100); C1.Initialize(120, 10); C2.Initialize(170, 150); P2.Initialize(220, 80); Graphics := TGPGraphics.Create(Handle); Pen := TGPPen.Create($FF0000FF, 2); Graphics.DrawBezier(Pen, P1, C1, C2, P2); Pen.Width := 1; Pen.Color := $FFFF0000; Graphics.DrawRectangle(Pen, P1.X-3, P1.Y-3, 6, 6); Graphics.DrawRectangle(Pen, P2.X-3, P2.Y-3, 6, 6); Graphics.DrawEllipse(Pen, C1.X-3, C1.Y-3, 6, 6); Graphics.DrawEllipse(Pen, C2.X-3, C2.Y-3, 6, 6); Pen.Color := $FFC0C0C0; Graphics.DrawLine(Pen, P1, C1); Graphics.DrawLine(Pen, P2, C2); end; //把一条当作多条画(DrawBeziers), 结果同上 procedure TForm1.FormPaint(Sender: TObject); var Graphics: IGPGraphics; Pen: IGPPen; Pts: array[0..3] of TGPPoint; begin Pts[0].Initialize(30, 100); Pts[1].Initialize(120, 10); Pts[2].Initialize(170, 150); Pts[3].Initialize(220, 80); Graphics := TGPGraphics.Create(Handle); Pen := TGPPen.Create($FF0000FF, 2); Graphics.DrawBeziers(Pen, Pts); Pen.Width := 1; Pen.Color := $FFFF0000; Graphics.DrawRectangle(Pen, Pts[0].X-3, Pts[0].Y-3, 6, 6); Graphics.DrawRectangle(Pen, Pts[3].X-3, Pts[3].Y-3, 6, 6); Graphics.DrawEllipse(Pen, Pts[1].X-3, Pts[1].Y-3, 6, 6); Graphics.DrawEllipse(Pen, Pts[2].X-3, Pts[2].Y-3, 6, 6); Pen.Color := $FFC0C0C0; Graphics.DrawLine(Pen, Pts[0], Pts[1]); Graphics.DrawLine(Pen, Pts[3], Pts[2]); end;
DrawBeziers 测试图:

DrawBeziers 测试代码:
uses GdiPlus;
const
Pts: array[0..6] of TGPPoint = (
(X: 24; Y: 32), // Pt1
(X: 16; Y: 88), // C1
(X: 36; Y:132), // C2
(X:120; Y: 20), // Pt2
(X:180; Y:150), // C3
(X:210; Y: 90), // C4
(X:210; Y: 20) // Pt3
);
//两条 Bezier 线需要 7 个点, 而不是 8 个; 因为 Bezier1 的终点即是 Bezier2 的起点;
//多条 Bezier 线需要的点数 = 3 * 线数 + 1;
//数组 ID 能被 3 整除的点是端点, 其他是控制点
procedure TForm1.FormPaint(Sender: TObject);
var
Graphics: IGPGraphics;
Pen: IGPPen;
Brush: IGPBrush;
Rect: TGPRect;
i: Integer;
begin
Graphics := TGPGraphics.Create(Handle);
Pen := TGPPen.Create($FFFF0000, 2);
Brush := TGPSolidBrush.Create($800000FF);
Graphics.DrawBeziers(Pen, Pts);
for i := 0 to Length(Pts) - 1 do
begin
Rect.Initialize(Pts[i].X - 4, Pts[i].Y - 4, 8, 8);
if i mod 3 = 0 then
Graphics.FillRectangle(Brush, Rect)
else
Graphics.FillEllipse(Brush, Rect);
end;
end;
浙公网安备 33010602011771号