GDI+( Graphics Device Interface Plus)是 Windows操作系统用来执行绘画及其他相关图形操作的一套子系统,是由. Net Framework中的System.Drawing命名空间提供的一组通过C++类实现的应用程序编程接口,主要负责显示屏幕和打印设备输出的有关信息,它使开发人员可以利用 Windows内置的图形功能轻松地创建图形应用程序。

作为图形设备接口的GDI+使得应用开发人员在输出屏幕和打印机信息时无需考虑具体显示设备的细节,只需调用GDI+库输出的类的一些方法即可完成图形操作,真正的绘图工作由这些方法交给特定的设备驱动程序来完成,GDI+使得图形硬件和应用程序相互隔离从而使开发人员编写与设备无关的应用程序变得非常容易。本教程将以 VB.Net中的GDI+的技术来实现各种绘图功能。

GDI+绘图的流程

  1. 创建 Graphics对象;
  2. 创建画笔和画刷;
  3. 使用 Graph对象的绘图方法绘制图形输出文字等;
  4. 释放 Graphics对象和绘图对象所占用的系统资源。
    'Form1_Paint是当窗体重绘制图形时候触发,如:窗体初始化、窗体改变大小,都会触发这个paint事件来完成图形的重画工作。
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
'创建 Graphics对象
Dim g As Graphics = e.Graphics
'创建画刷
Dim b As SolidBrush = New SolidBrush(Color.Blue)
'创建字体
Dim f As Font = New Font("宋体", 15, FontStyle.Bold)
'绘制文字
g.DrawString("Hello,World!", f, b, 30, 60)
'释放 Graphics对象和绘图对象所占用的系统资源
f.Dispose()
b.Dispose()
g.Dispose()
End Sub

刨建 Graphics对象

在VB.NET中用GDI+创建绘图,必须先创建 Graphics对象。 Graphices对象表示GDI+的绘图表面,是用来绘制图形图像的容器。创建 Graphics对象后,才可以使用GDI+的画笔、

画刷等结合Color、Font等对象进行绘制线条形状、填充区域、显示文本图像等操作。

VB. NET中的窗体和所有具有Text属性的控件都可以作为绘制图形的表面。创建Graphics对象有以下3种方法。

1.使用 Create Graphics方法创建

通过使用某控件或窗体的 CreateGraphics方法来灵活获取对Graphics对象的引用,该对象表示该控件或窗体的绘图表面。这是一种常见的创建方法,其格式为

Dim 对象名 As Graphics
对象名=窗体名(或控件名).CreateGraphics
2.利用PaintEventArgs参数传递 Graphics对象

通过窗体或控件的Pait事件可以直接完成图形绘制,在编写Pant事件处理程序时,利用参数 PaintEventArgs提供的窗体图形对象。格式为

Dim 对象名 As Graphics
对象名=e.Graphics
3.从 Image对象创建

创建 Graphics对象还可以由Image对象或者lmage类派生的任何对象来创建。调用Graphics.Fromlmage,提供要从其中创建 Graphics对象的Imge变量的名称,如下面代码所示:

Dim myBitmap as New Bitmap("C:\myPic")
Dim g as Graphics =Graphics.Fromlmage( myBitmap)

创建画笔和画刷

在获得一个 Graphics对象之后,接下来就要决定在表面上如何进行绘制。可能需要以

下对象中的一个或几个画笔、画刷。在GDI+中,Pen类和Brush类分别表示画笔和画刷。

在需要绘制直线、矩形和曲线的边界时使用画笔在需要填充图形对象时使用画刷。

1.画笔Pen

在Graphics画布上处理图形的轮廓部分需要使用的工具是画笔Pen。通过使用Pen类可以设置所画线条的颜色、线宽和样式,在使用前需要引用System.Drawing.Drawing2D名称空间。创建画笔的格式为:

Dim pen As New Pen(Color.Brown, 5)
2.画刷Brush

画刷Brush主要用于封闭图形的填充.

  1. 只能用一种颜色填充区域的称为单色刷,声明单色刷的格式为:
Dim mybrush As New SolidBrush(Color.Brown)
  1. 用一个图片来填充图形的画刷称为纹理刷,声明纹理刷的格式为:
Dim d As New TextureBrush(New Bitmap("path"))
  1. 用线性渐变色来填充图形的画刷称为渐变刷,声明渐变刷的格式为:
Dim d As New LinearGradientBrush(New Point(10), New Point(10), Color.White, Color.Black)
  1. 用条纹模式来填充图形的画刷称为网格刷,声明网格刷的格式为:
Dim d As New HatchBrush(HatchStyle.BackwardDiagonal, Color.White,  Color.Black)

图形绘制

1. 绘制直线的格式为:g.DrawLine(pen, 10, 10, 250, 10) 或者 g.DrawLine(pen, New Point(10, 10), New Point(250, 10))

2. 绘制矩形的格式为:g.DrawRectangle(pen, 10, 10, 250, 10)

2. 绘制圆 g.DrawEllipse(pen, 10, 10, 50, 50)

3. 绘制椭圆的格式为:g.DrawEllipse(pen, New Rectangle(10, 10, 50, 10))

参数pen为画笔,参数rect为Rectangle结构,指定圆的外切矩形区域。

4. 绘制弧线的格式为:

5. 绘制扇形

6. 绘制非闭合曲线

7. 填充图形填充矩形的格式与对应绘制图形的方法相似,区别是方法名由“绘制”改为“填充”,对应参数pen换成brush。

8. Clear方法使用Clear方法可以清除整个画布并以指定的背景色填充。

使用 Graphics对象

在创建 Graphics对象、画笔或画刷之后,就可以绘制直线、边框、曲线或图像了。 Graphis类为绘制和填充图形、曲线或图像提供了相应的方法。例如, DrawEllipse使用特定的画

笔来绘制椭圆的边界,而FillEllipse将使用一种填充颜色来绘制椭圆。绘制方法使用画笔作为参数,而填充方法则使用画刷作为参数。

释放 Graphics对象

在 Graphics对象使用完毕后,必须将其释放。在VB.NET中提供了一个 Dispose方法,此方法可以用来释放Graphics对象、画笔对象等所占用的全部资源。

例如创建g为 Graphics对象,使用完后用g.Dispose()释放。

第二章 VB.NET 绘图基础的更多相关文章

  1. 《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型

    第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以 ...

  2. 进击的Python【第二章】:Python基础(二)

    Python基础(二) 本章内容 数据类型 数据运算 列表与元组的基本操作 字典的基本操作 字符编码与转码 模块初探 练习:购物车程序 一.数据类型 Python有五个标准的数据类型: Numbers ...

  3. 第二章 Matlab面向对象编程基础

    DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...

  4. 《零成本实现Web自动化测试--基于Selenium》第二章 Selenium简介和基础

    第一部分 Selenium简介 1.Selenium 组建 1.1 Selenium-IDE Selenium-IDC是开发Selenium测试案例的集成开发环境.它像FireFox插件一样的工作,支 ...

  5. 自学Java第二章——《Java的基础语法》

    2.1 标识符 简单的说,凡是程序员自己命名的部分都可以称为标识符. 即给类.变量.方法.包等命名的字符序列,称为标识符. 1.标识符的命名规则 (1)Java的标识符只能使用26个英文字母大小写,0 ...

  6. 《Entity Framework 6 Recipes》翻译系列 (4) -----第二章 实体数据建模基础之从已存在的数据库创建模型

    不知道对EF感兴趣的并不多,还是我翻译有问题(如果是,恳请你指正),通过前几篇的反馈,阅读这个系列的人不多.不要这事到最后成了吃不讨好的事就麻烦了,废话就到这里,直奔主题. 2-2 从已存在的数据库创 ...

  7. 《Entity Framework 6 Recipes》中文翻译系列 (6) -----第二章 实体数据建模基础之使用Code First建模自引用关系

    2-5 使用Code First建模自引用关系 问题 你的数据库中一张自引用的表,你想使用Code First 将其建模成一个包含自关联的实体. 解决方案 我们假设你有如图2-14所示的数据库关系图的 ...

  8. 《Entity Framework 6 Recipes》中文翻译系列 (7) -----第二章 实体数据建模基础之拆分实体到多表以及拆分表到多实体

    2-6 拆分实体到多表 问题 你有两张或是更多的表,他们共享一样的主键,你想将他们映射到一个单独的实体. 解决方案 让我们用图2-15所示的两张表来演示这种情况. 图 2-15,两张表,Prodeuc ...

  9. 《Entity Framework 6 Recipes》中文翻译系列 (8) -----第二章 实体数据建模基础之继承关系映射TPT

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 2-8 Table per Type Inheritance 建模 问题 你有这样一 ...

  10. 《Entity Framework 6 Recipes》中文翻译系列 (9) -----第二章 实体数据建模基础之继承关系映射TPH

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 2-10 Table per Hierarchy Inheritance 建模 问题 ...

随机推荐

  1. Python趣味入门10:推倒繁琐化烦为简的推导式

    前言 <西部世界>的德洛丽丝进入了MAZE迷宫,假设她需要列出一系列的平方数作为密码,来进入迷宫.在以往的代码生成类似的数列需要使用循环语句,写多行语句.Python有了推导式,只需要1句 ...

  2. Base64编码:数据传输的安全使者

    Base64编码是一种将二进制数据转换为可传输的文本表示形式的方法,它在全球范围内被广泛应用于网络通信.数据存储和传输等领域.本文将从多个方面介绍Base64编码的原理.应用及其在现实场景中的优势,帮 ...

  3. echarts label formatter params backgroundColor rich 标签设置背景图并传参

    小技巧 如果想给label设置背景图,需要使用到rich属性,按照官网示例就可以实现,折线.柱图都一样. 但是大多数情况formatter都是用来通过params里面参数设置自定义的逻辑,如何将两者结 ...

  4. 编写一个小而强大的 Windows 动态屏保壁纸

    写在前面 两年前我做了第一个开源软件 DreamScene2 动态桌面,如今受到了很多人的喜欢,这增加了我继续做好开源软件的信心.之前的这个软件一直有人希望我加入一个设置屏保壁纸的功能,因为 Drea ...

  5. MySQL进阶篇:详解存储引擎介绍和基本使用

    1. MySQL进阶篇:第一章__一.一_存储引擎介绍和基本使用 1.1 MySQL体系结构 1). 连接层 最上层是一些客户端和链接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类 ...

  6. 华为云弹性云服务器ECS搭建FTP服务实践

    摘要:在使用华为弹性云服务器ECS搭建FTP服务的时候,经常会遇到搭建完成后无法访问的问题.本篇通过演示windows IIS搭建FTP方法,讲解ftp主动模式.被动模式原理来说明无法访问的原因及解决 ...

  7. 华为云发布CodeArts Inspector漏洞管理服务,守护产品研发安全

    本文分享自华为云社区<华为云发布CodeArts Inspector漏洞管理服务,守护产品研发安全>,作者: 华为云头条. 2023年9月7日,华为云正式发布CodeArts Inspec ...

  8. CTPN+CRNN算法端到端实现文字识别的实战开发

    本文分享自华为云社区<CTPN+CRNN 算法端到端实现文字识别>,作者:HWCloudAI. OCR介绍 光学字符识别(英语:Optical Character Recognition, ...

  9. 总是记不住java的IO流用法?用N个问题教你掌握java IO流

    摘要:Java IO 体系看起来类很多,感觉很复杂,但其实是 IO 涉及的因素太多了.在设计 IO 相关的类时,编写者也不是从同一个方面考虑的,所以会给人一种很乱的感觉,并且还有设计模式的使用,更加难 ...

  10. Axure 自定义元件库

    点击文件 -> 新建元件库 可以添加多个元件,并将期重命名 保存元件库 新建页面 添加元件,选择自建的元件库 导入后就会发现我的原件库 这样就可以使用我们自定义的元件库了