1.Graphics

  Graphics对象是GDI+绘图表面,因此在Windows窗体应用程序中要使用GDI+创建绘图,必须要先创建Graphics.在给窗体注册一个Paint事件后,Graphics的创建方式有以下三种。

1)直接获取Paint事件的PaintEvenlArgs中Graphics对象(最常用)。

 private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g1 = e.Graphics;
}

2)从Image中创建Graphics对象。

         private void Form1_Paint(object sender, PaintEventArgs e)
{
//创建一个Image对象
Bitmap imgTemp = new Bitmap(, );
Graphics g2 = Graphics.FromImage(imgTemp);
}

3)用CreateGraphics方法创建Graphics对象。

         private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g3 = this.CreateGraphics();
}

2.Pen

  在Graphics这张图纸准备好了以后,我们就可以使用Pen(钢笔)进行绘图了。Pen类位于System.Drawing名称空间中(在Windows窗体应用程序当中不需要单独引用)。最简单的创建方式为:

Pen p = new Pen(Color.White,);        //创建颜色为白色,像素为1的钢笔

  下面为Pen的一个应用实例

 private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g1 = e.Graphics; Pen p = new Pen(Color.Blue, ); //定义笔颜色蓝色,大小2个像素
g1.DrawEllipse(p, , , , ); //绘制一个椭圆,椭圆的外切矩形左上坐标为(0,80),矩形长(x)宽(y)为(60,30)
p.Dispose(); //释放Pen所占用的资源
g1.Dispose(); //释放由Graphics使用的资源
}

  绘图结果如下

3.Brush

  Brush(笔刷)和Pen类似,不过Brush类本身是一个抽象类不能直接实例化。GDI+的API提供五个类,扩展并提供了Brush类的具体实现。这5个类分别是:

1)SolidBrush  使用纯颜色填充图形

应用实例

 private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics; //SolidBrush的使用: 使用纯颜色填充图形
Brush bh = new SolidBrush(Color.Black);
g.FillEllipse(bh, , , , ); //绘制一个椭圆
bh.Dispose(); //释放资源
g.Dispose();
}

绘图结果:

2)TextureBrush  使用基于光栅的图像(位图,JPG等图像)填充图形

应用实例:

  首先找一种要填充的图片,最好在项目中创建一个img文件夹,将其添加到文件夹中

 private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics; //TextureBrush的使用:使用基于光栅的图像(位图,JPG等图像)填充图形
string path = @"E:\软件\Microsoft Visual Studio 10.0\project\CSharp\22GDI+图形图像处理技术\22_3创建Brush对象\22_3创建Brush对象\imgs\1.png";
Bitmap img;
if (File.Exists(path))
{
img = new Bitmap(path);
Brush br = new TextureBrush(img);
g.FillEllipse(br, , , , );
br.Dispose();
}
else
MessageBox.Show("要填充的图片不存在!");
g.Dispose();
}

绘图结果

3)LinearGradientBrush  使用颜色渐变填充图形

应用实例

 private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics; //LinearGradientBrush:使用颜色线性渐变填充图形(需要单独引用System.Drawing.Drawing2D)
//设置渐变的起点坐标(0,110),终点坐标(60,110),颜色分别为白色和黑色
LinearGradientBrush lgb = new LinearGradientBrush(new Point(, ), new Point(, ), Color.White, Color.FromArgb(, , , ));
g.FillEllipse(lgb, , , , );
lgb.Dispose();
g.Dispose();
}

绘图结果

4)PathGradientBrush  使用渐变色填充图形,渐变方向是从有路径定义的图形边界指向图形中心

应用实例

 private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics; //PathGradientBrush:以自定义路径的方式渐变填充图形(需要单独引用System.Drawing.Drawing2D)
//给命名空间改名未避免错误,应该再命名空间上右键->重构->重命名(F2)
GraphicsPath gp = new GraphicsPath(); //创建路径
gp.AddEllipse(, , , ); //添加路径
PathGradientBrush pgb = new PathGradientBrush(gp); //根据路径创建笔刷
pgb.CenterColor = Color.FromArgb(, , , ); //设定中间颜色
Color[] colors = { Color.FromArgb(, , , ) };
pgb.SurroundColors = colors; //设定环绕颜色
e.Graphics.FillEllipse(pgb, , , , ); //使用笔刷绘图
pgb.Dispose();
g.Dispose();
}

绘图结果

5)HatchBrush  使用各类图案填充图形

应用实例

  private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics; //HatchBrush:使用各类图案填充图形(需要单独引用System.Drawing.Drawing2D)
HatchBrush hb = new HatchBrush(HatchStyle.HorizontalBrick, Color.Red, Color.Yellow); //第一个参数枚举值可以按需求更改
g.FillEllipse(hb, , , , );
hb.Dispose();
g.Dispose();
}

绘图结果

4.综合示例:绘制各种形状

 private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics; //获取Graphice画板
Pen p = new Pen(Color.Red, ); //建立Pen对象
g.DrawRectangle(p, , , ,); //绘制左上角坐标(10,10),长宽为(40,60)的矩形 p.Color = Color.Green; //更改画笔颜色为绿色
Point[] triangleP = {new Point(,),
new Point(,),
new Point(,)};
g.DrawPolygon(p, triangleP); //根据给定坐标绘制多边形(三角形) Point[] pentacleP = {new Point(,),
new Point(,),
new Point(,),
new Point(,),
new Point(,),
new Point(,),
new Point(,),
new Point(,),
new Point(,),
new Point(,)
};
g.DrawPolygon(p, pentacleP); //绘制正五边形 p.Color = Color.Cyan; //改变画笔颜色
g.DrawArc(p, , , , , , ); //绘制圆弧,
//(150,0)决定椭圆外切圆左上坐标.(50,50)决定矩形的长宽.(0,90)决定起始角度和扫过的角度 g.DrawPie(p, , , , , , ); //绘制扇形,参数列表和绘制圆弧一样 p.Dispose(); //释放Pen资源
g.Dispose(); //释放Graphics资源
}

绘图结果

Ps:学习过程中应用的小技巧。

1.给命名空间改名未避免错误,应该再命名空间上右键->重构->重命名(F2)

2.需要打特殊符号时,如版权符号。可以用win+R调出命令窗口,输入charmap回车,然后再里面选择。

3.使用DrawPolygon方法绘制多边形时,可以先使用其他绘图工具(如CAD)得到多边形的顶点坐标。

  

GDI+图形图像处理技术中Pen和Brush的简单使用和简单图形的绘制(C#)的更多相关文章

  1. HTML5图形图像处理技术研究

    摘要:图形图像处理平台大部分是传统的C/S架构的桌面应用程序,维护困难,共享性差,而B/S架构的Web程序具有易维护.易共享的优点.本文研究了基于HTML5的Web图形图像处理技术,用HTML5实现了 ...

  2. php图形图像处理技术

    图形图像处理技术,gd库的强大支持,PHP的图像可以是PHP的强项,PHP图形化类库,jpgraph是一款非常好用的强大的图形处理工具. 在PHP中加载GD库 gd官方网址下载: http://www ...

  3. GDI+图形图像处理技术——GDIPlus绘图基础

    GDI+概述 GDI在windows中定义为Graphis Device interface,及图形设备接口,是Windows API(application Programming Interfac ...

  4. 3D图形图像处理软件HOOPS介绍及下载

    HOOPS 3D Application Framework(以下简称HOOPS)是建立在OpenGL.Direct3D等图形编程接口之上的更高级别的应用程序框架.不仅为您提供强大的图形功能,还内嵌了 ...

  5. 【转 | 侵删】2D 绘图技术中的坐标系统与坐标变换

    本文介绍在 2D 绘图技术中的坐标系统和坐标变换的相关知识.同时介绍 Kity 在这方面提供的 API .希望这些知识对于需要进行图形应用开发的同学会有所帮助. 锤子的故事 很久以前,有一个画家,他很 ...

  6. HTML5技术实现Web图形图像处理——WebPhotoshop精简版

    WebPhotoshop精简版是利用HTML5技术在Web上实现对图形图像的处理,构建易维护.易共享.易于拓展.实时性的Web图形图像处理平台. 精简版功能包括:图形绘制.图像处理.图像操作.完整版包 ...

  7. [转]C#中基于GDI+(Graphics)图像处理系列之前言

    直接给出原文链接吧: C#中基于GDI+(Graphics)图像处理系列之前言 链接:https://pan.baidu.com/s/1zm5TCOHqkqEfiLZuqO0UMA 提取码:qz0h

  8. 数字图像处理技术在TWaver可视化中的应用

    数字图像处理(Digital Image Processing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程.常用的图像处理方法有图像增强.复原.编码.压缩等,数 ...

  9. C# GDI+双缓冲技术

    我想有很多搞图形方面的朋友都会用到双缓冲技术的时候,而且有的时候她的确是个头疼的问题.最近我也要用双缓冲技术,程序怎么调试都不合适,当要对图形进行移动时,总是会出现闪烁抖动.在网上找了些资料,说得都不 ...

随机推荐

  1. iOS10 权限适配

    权限适配 这应该算iOS10系统适配的范畴,最近这两个都在弄,所以就直接和Xcode8适配一起写出来了. 在iOS10之后需要在Info.plist中,添加新的字段获取权限,否则在iOS10上运行会导 ...

  2. Visual C++2012中CMFCPropertySheet的用法

    看到了一个例子(NewControls),该例子中使用了按钮图片等特效(哈哈,个人觉得挺高端),但是仔细看它的工程,没有xxxDlg.cpp就觉得奇诡了,难道不是基于对话框完成的?最终查阅居然是这样的 ...

  3. Nodejs简单介绍以及在windows环境下安装与配置流程

    简介 一. Nodejs是什么? Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. ...

  4. 64位系统如何导入excel

    1.运行C:\Windows\SysWOW64\odbcad32.exe,打开后如下图所示: 2.点击添加,选择如下图所示Microsoft Excel Driver(*.xls) 3.点击完成,在弹 ...

  5. 应用Druid监控SQL语句的执行情况

    Druid是什么? Druid首先是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBo ...

  6. C--变量的命名规则

    规则1.标识符最好采用英文单词或其组合,不允许使用拼音. 规则3.当标识符由多个词组成时,每个词的第1个字母大写,其余全部小写: int   CurrentVal; 规则5.对在多个文件之间共同使用的 ...

  7. Datasnap Image

    delphi用,不能与java.c#互相识别. procedure TServerMethods.UpdateDoc(ItemID : integer; doc : TStream); delphi用 ...

  8. caffe源码阅读(一)convert_imageset.cpp注释

    PS:本系列为本人初步学习caffe所记,由于理解尚浅,其中多有不足之处和错误之处,有待改正. 一.实现方法 首先,将文件名与它对应的标签用 std::pair 存储起来,其中first存储文件名,s ...

  9. EM算法(1):K-means 算法

    目录 EM算法(1):K-means 算法 EM算法(2):GMM训练算法 EM算法(3):EM算法运用 EM算法(4):EM算法证明 EM算法(1) : K-means算法 1. 简介 K-mean ...

  10. python3.5------购物车

    笔者:QQ:   360212316 逻辑图 程序代码 # /usr/bin/env python # -*- coding: utf-8 -*- product_list = [ ["ip ...