文档章节

GdiPlus[33]: 基本绘图与填充命令

涂孟超
 涂孟超
发布于 2014/09/26 15:36
字数 970
阅读 6
收藏 0
点赞 0
评论 0

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;

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2009/12/16/1625966.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
Matplotlib 中文用户指南 8.1 屏幕截图

屏幕截图 原文:Screenshots 译者:飞龙 协议:CC BY-NC-SA 4.0 这里你会找到一些示例图和生成它们的代码。 简单绘图 这里是一个带有文本标签的基本的绘图: 源代码 子图示例 多个轴域(例如...

apachecn_飞龙
2017/01/30
0
0
iOS——Quartz2D(二维图形绘制)

1、Quartz2D 基本概述 Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎。它提供了低级别、轻量级、高保真度的2D渲染。 Quartz 2D是一个二维图形绘制引擎,适用于iOS...

kinglin_fu
2016/01/25
196
0
python中的turtle库绘制图形

1. 前奏: 在用turtle绘制图形时,需要安装对应python的解释器以及IDE,我安装的是pycharm,在安装完pycharm后,在pycharm安装相应库的模块,绘图可以引入turtle模块,想要进行运算可以引入n...

---dgw博客
04/07
0
0
Word 2003绘图技巧

Word 中的图文混排功能非常强大,我们常用 Microsoft Word 来编制数学教案、试卷、打印文稿,但是绘图往往令人头疼.其实 Word 中的制图功能比较强大,有许多技巧.若在使用过程中细心体会反...

麻新鑫
2012/10/26
332
1
【QT技术应用】2D绘图

2D绘图 Qt4中的2D绘图部分称为Arthur绘图系统.它由3个类支撑整个框架,QPainter,QPainterDevice和QPainterEngine.QPainter用来执行具体的绘图相关操作 如画点,画线,填充,变换,alpha通道等...

长平狐
2012/09/03
1K
0
VC 6.0 配置和使用gdi+

GDI+ GDI+是Windows XP中的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息,它是一组通过C++类实现的应用程序编程接口。顾名思义,GDI+是以前版本GDI的继承者,出于兼容性考虑,W...

junwong
2012/03/23
1K
0
iOS开发系列--打造自己的“美图秀秀”

--绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架。今天我们将围绕iOS中两大图形、图像绘图框架进行介绍:...

jianxin160
2015/08/18
0
0
安卓高级画布绘图

我们已经介绍了Canvas,在那里,已经学习了如何创建自己的View。在第7章中也使用了Canvas来为MapView标注覆盖。 画布(Canvas)是图形编程中一个很普通的概念,通常由三个基本的绘图组件组成:...

Carbenson
2015/10/18
367
0
Python Matplotlib 绘图使用指南 (附代码)

雷锋网按:本文为雷锋字幕组编译的技术博客,原标题 Matplotlib Plotting Guide, 作者为 Prince Grover。 翻译 | 李振 于志鹏 整理 | 凡江 大多数人不会花大量时间去学 matplotlib 库,仍然...

雷锋字幕组
05/22
0
0
Inkpad绘图原理浅析

Inkpad是一款非常优秀的iPad矢量绘图软件,保管你一看见就忘不了。我的感觉是”一览众山小”、”相见甚晚”,以至于我写的TouchVG就是”小巫见大巫”。必须好好学习这款软件的代码,破解其高...

云贵高原
2014/01/06
3.3K
7

没有更多内容

加载失败,请刷新页面

加载更多

下一页

七、JSP九大内置对象和四个作用域

九大内置对象: request:类型是HttpServletRequest,和Servlet里的HttpServletRequest一模一样。 response:类型是HttpServletResponse,和Servlet里的HttpServletResponse一模一样。JSP里基...

Wakeeee_
5分钟前
0
0
Confluence 6 配置快捷链接

快捷链接提供了提供了一个在 Confluence 中访问从常用资源的快速方法。当你创建一个快捷链接的时候,你需要为你的快捷链接 URL 指派一个 Key,用户可以在 Confluence 中只输入这个 Key 用来替...

honeymose
5分钟前
0
0
我的第一篇博文

网络界的前辈们好。本人从接触网络到你现在也有4、5年的时间了,期间不断的通过网络学习,当然也没少看大牛们给的建议。 2011年的9月份,如愿以偿的上了“大学”,刚上大学就接触到了一门叫做...

yeahlife
31分钟前
0
0
第十四章NFS服务搭建与配置

14.1 NFS介绍 NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netap...

Linux学习笔记
37分钟前
0
0
双向认证-nginx

1、设置容器 docker run -it --name nginx-test2 -v /home/nginx:/apps -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro -p 8183:80 -p 7443:443 -d nginx:stable 2、修改nginx配......

hotsmile
37分钟前
0
0
深入了解 Java 自动内存管理机制及性能优化

一图带你看完本文 一、运行时数据区域 首先来看看Java虚拟机所管理的内存包括哪些区域,就像我们要了解一个房子,我们得先知道这个房子大体构造。根据《Java虚拟机规范(Java SE 7 版)》的规...

Java大蜗牛
39分钟前
4
0
SpringBoot | 第六章:常用注解介绍及简单使用

前言 之前几个章节,大部分都是算介绍springboot的一些外围配置,比如日志 配置等。这章节开始,开始总结一些关于springboot的综合开发的知识点。由于SpringBoot本身是基于Spring和SpringMvc...

oKong
40分钟前
7
0
云数据库架构演进与实践

如今,大型企业如金融企业和银行等,在下一代的微服务架构转型要求下,需要基础软件和数据平台能够实现原生的云化,以满足微服务架构的需求。 微服务,也就是一种面向服务的,有特定边界的松...

巨杉数据库
41分钟前
0
0
Linux系统梳理---系统搭建(一):jdk卸载与安装

1.去官网下载符合Linux版本的jdk,暂用jdk-8u171-linux-x64.rpm 2.登陆Linux,进入usr目录,创建java目录(方便管理,可以其他位置):mkdir java 3.上传下载的jdk包至Linux服务器,使用rz指令(sz f...

勤奋的蚂蚁
52分钟前
0
0
Linux Kernel 4.16 系列停止维护,用户应升级至 4.17

知名 Linux 内核维护人员兼开发人员 Greg Kroah-Hartman 近日在发布 4.16.18 版本的同时,宣布这是 4.16 系列的最后一个维护版本,强烈建议用户立即升级至 4.17 系列。 Linux 4.16 于 2018 年...

六库科技
54分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部