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. 引用对象的使用和易产生bug的示例

    本文属原创,转载请注明出处:http://www.cnblogs.com/robinjava77/p/5481608.html  (Robin) QuoteTest(引用对象技巧) import ja ...

  2. Unity已经学会的

    1.以MonoBehaviour为脚本的开发模式. 2.MonoBehaviour的大多数API. 3.动画系统大多数了解. 4.UI了解一些,能写UI. 5.Editor了解一些,能写Editor. ...

  3. 数据库FMDB-sql

    1.首先要先导入第三方类库FMdatabase. 2.获得存放数据库文件的沙盒地址. #pragma mark - 创建数据库 - (void)createAndInitDatabase { NSSt ...

  4. 两个shell脚本

    脚本1停止lampp #!/bin/bash #set -xv 开启调试模式? count=`ps -ef|grep lampp|grep -v "grep"|wc -l`  # ...

  5. noSuchMethodException问题

    上午遇到一个nosuchMethodException 折腾了一上午发现是jar包冲突引起的.首先发现单独运行没问题,和其他项目整合后就有问题,当时以为代码问题,其实早该想到是jar包冲突造成的... ...

  6. Linux如何查看进程、杀死进程、启动进程等常用命令

    Linux如何查看进程.杀死进程.启动进程等常用命令 关键字: linux 查进程.杀进程.起进程1.查进程    ps命令查找与进程相关的PID号:    ps a 显示现行终端机下的所有程序,包括 ...

  7. 带名称空间的xml数据查询

    <gpx xmlns="http://www.topografix.com/GPX/1/1" creator="MapSource 6.5" versio ...

  8. PHP实现队列及队列原理

    看看各语言实现队列的方法:PHP实现队列:第一个元素作为队头,最后一个元素作为队尾 <?php /** * 队列就是这么简单 * * @link http://www.phpddt.com */ ...

  9. 什么是JVM?

    什么是JVM? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的 ...

  10. Unity5 AssetBundle 打包以及加载

    using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEditor; us ...