delphi GDI+ [1]

摘抄自:万一的博客 

安装头文件:http://www.cnblogs.com/del/archive/2008/06/06/1215319.html

目录

  1. 基本使用方法(绘制直线)
  2. 绘制一组直线
  3. 绘制矩形
  4. 绘制一组矩形
  5. 绘制椭圆型
  6. 绘制绘制弧线
  7. 绘制扇形(饼型)
  8. 绘制多边形
  9. 绘制闭合曲线

绘制曲线

基本使用方法:unit Unitinterfac

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormPaint(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses GDIPOBJ, GDIPAPI; //头文件

procedure TForm1.FormPaint(Sender: TObject);
var
  g: TGPGraphics; //我试了一下
  p: TGPPen;
begin
 {这里我遇到一个问题,我把 g 的 Create 放到FormCreate方法中,把g.free放到FormDestroy里面的时候
  下面的draw会画不出东西来,包括g.Clear也没用了,为什么?为什么??}

g := TGPGraphics.Create(Canvas.Handle);//记住这个东西一定要随操作放在一起,在一起,在一起……  
p :
= TGPPen.Create(MakeColor(255,0,0), 2);

 g.Clear(MakeColor(255,255,255)); g.DrawLine(p, 20, 40, 200, 40); {参数是整数} g.DrawLine(p, MakePoint(20,60), MakePoint(200,60)); {参数是点(整数)} g.DrawLine(p, 20.9, 80.0, 200.9, 80.0); {参数是小数} g.DrawLine(p, MakePoint(20.9, 100.0), MakePoint(200.9, 100.0)); {参数是点(小数)} g.Free; p.Free; end; end.

绘制一组直线

//使用数组记录端点
  PtArr: array of TGPPoint;

//绘制一组直线, 其实就是从七点开始依次将相邻的点连接 
{如果是动态数组的话, 需要 @PtArr, 但动态数组本身就是个指针}
  g.DrawLines(p, PGPPoint(PtArr), Length(PtArr));

绘制矩形

//绘制矩形
//x, y, w, h:Integer;
  p.SetColor(aclRed);
  g.DrawRectangle(p, x, y, w, h);

  p.SetColor(aclGold);
  g.DrawRectangle(p, MakeRect(x, y, w, h));

一组矩形

//矩形变量
  Rect: TGPRect;
  RectArr: array[0..31] of TGPRect;
//矩形的属性
  Rect.X := 0;
  Rect.Y := 0;
  Rect.Width := ClientWidth;
  Rect.Height := ClientHeight;
//绘制矩形
  g.DrawRectangles(p, PGPRect(@RectArr), Length(RectArr));

椭圆型

//椭圆形
g.DrawEllipse(p, x, y, w, h);

绘制弧线(其实就是没画完椭圆形)

//绘制椭圆形
//x, y, w, h:Integer;
//a1, a2:Integer;
//a1是开始角度(0 表示在圆心的正右边开始画),a2是要画的弧度. 
//a1 + a2 > 0 是顺时针角度,< 0 是逆时针角度

g.DrawArc(p, x, y, w, h, a1, a2);

绘制扇形(饼型)

//绘制扇形,具体参考绘制弧形
g.DrawPie(p, x, y, w, h, a1, a2);

多边形

//可参考绘制一组直线的方法,差别只是多了一条起点和重点间的连线
g.DrawPolygon(p, PGPPoint(PtArr), Length(PtArr));

闭合曲线

//参考多边形,差别是多边形曲线多了一个属性tension(控制弯曲程度)
var
   tension: Single;

{最后一个参数是可选的, 默认值是 0.5, 为 0 时曲线会转为直线段}
g.DrawClosedCurve(p, PGPPoint(PtArr), Length(PtArr),tension);

曲线

//参考闭合曲线,区别是不闭合
//第四、五位是数组中的起始和结束的序数
{后面三个参数是可选的, 最后参数的默认值是 0.5, 为 0 时曲线会转为直线段}
  g.DrawCurve(p, PGPPoint(PtArr), Length(PtArr), n1, n2, tension);
原文地址:https://www.cnblogs.com/laymond/p/3401478.html