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;