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. js计时器

    js代码: <script language="javascript"> ,h=,s=,ss=; function second(){ )==){s+=;ss=;} & ...

  2. c++类的嵌套(1)

    在一个类的内部定义另一个类或结构体,我们称之为嵌套类(nested class),或者嵌套类型.之所以引入这样一个嵌套类,往往是因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现 ...

  3. POJ 3276 (开关问题)

    题目链接: http://poj.org/problem?id=3276 题目大意:有一些牛,头要么朝前要么朝后,现在要求确定一个连续反转牛头的区间K,使得所有牛都朝前,且反转次数m尽可能小. 解题思 ...

  4. hdu 3954 Level up(线段树)

    题目链接:hdu 3954 Level up 题目大意:N个英雄,M个等级,初始等级为1,给定每一个等级须要的经验值,Q次操作,操作分两种,W l r x:表示l~r之间的英雄每一个人杀了x个怪物:Q ...

  5. Linux系统下用C语言获取MAC地址

    最近在做一个小程序,需要用到在linux系统里编写C程序从而获取MAC地址,从网上搜了一遍,想总结一下.如果你就只需要单个功能的程序,可以采用方法一,见代码1,一般最好能够封装起来,写成获取MAC地址 ...

  6. WebRTC 音视频开发

    WebRTC 音视频开发 webrtc   Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译 ...

  7. SQL 简单练习

    USE study; SELECT * FROM EMP --查询雇员姓名的最后三个字母 ) FROM EMP ; --查询10部门雇员进入公司的星期数 --1 查询部门30中的所有员工 --2 列出 ...

  8. 与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室

    原文:与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phon ...

  9. z-index用法总结

    一.定义: z-index 只适用于元素有定位的情况,表示层级 数值越大 层级越高 展示的位置越靠前. 二.用法: 1.同级关系: z-index值较大的元素将叠加在z-index值较小的元素之上 ( ...

  10. ClassLoader类加载机制&amp;&amp;JVM内存管理

    一.ClassLoader类加载机制 在java中类加载是遵循委派双亲加载的:通过调用loadClass方法逐级往上传递委派加载请求,当找不到父ClassLoader时调用其findClass方法尝试 ...