GDI+图形图像处理技术中Pen和Brush的简单使用和简单图形的绘制(C#)
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#)的更多相关文章
- HTML5图形图像处理技术研究
摘要:图形图像处理平台大部分是传统的C/S架构的桌面应用程序,维护困难,共享性差,而B/S架构的Web程序具有易维护.易共享的优点.本文研究了基于HTML5的Web图形图像处理技术,用HTML5实现了 ...
- php图形图像处理技术
图形图像处理技术,gd库的强大支持,PHP的图像可以是PHP的强项,PHP图形化类库,jpgraph是一款非常好用的强大的图形处理工具. 在PHP中加载GD库 gd官方网址下载: http://www ...
- GDI+图形图像处理技术——GDIPlus绘图基础
GDI+概述 GDI在windows中定义为Graphis Device interface,及图形设备接口,是Windows API(application Programming Interfac ...
- 3D图形图像处理软件HOOPS介绍及下载
HOOPS 3D Application Framework(以下简称HOOPS)是建立在OpenGL.Direct3D等图形编程接口之上的更高级别的应用程序框架.不仅为您提供强大的图形功能,还内嵌了 ...
- 【转 | 侵删】2D 绘图技术中的坐标系统与坐标变换
本文介绍在 2D 绘图技术中的坐标系统和坐标变换的相关知识.同时介绍 Kity 在这方面提供的 API .希望这些知识对于需要进行图形应用开发的同学会有所帮助. 锤子的故事 很久以前,有一个画家,他很 ...
- HTML5技术实现Web图形图像处理——WebPhotoshop精简版
WebPhotoshop精简版是利用HTML5技术在Web上实现对图形图像的处理,构建易维护.易共享.易于拓展.实时性的Web图形图像处理平台. 精简版功能包括:图形绘制.图像处理.图像操作.完整版包 ...
- [转]C#中基于GDI+(Graphics)图像处理系列之前言
直接给出原文链接吧: C#中基于GDI+(Graphics)图像处理系列之前言 链接:https://pan.baidu.com/s/1zm5TCOHqkqEfiLZuqO0UMA 提取码:qz0h
- 数字图像处理技术在TWaver可视化中的应用
数字图像处理(Digital Image Processing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程.常用的图像处理方法有图像增强.复原.编码.压缩等,数 ...
- C# GDI+双缓冲技术
我想有很多搞图形方面的朋友都会用到双缓冲技术的时候,而且有的时候她的确是个头疼的问题.最近我也要用双缓冲技术,程序怎么调试都不合适,当要对图形进行移动时,总是会出现闪烁抖动.在网上找了些资料,说得都不 ...
随机推荐
- LR12.53—使用HP网络导游示例应用程序
本教程使用 的HP Web之旅,一个样本的基于Web的旅行社系统,向人们展示LoadRunner将如何作为负载测试解决方案.惠普网络旅游用户连接到Web服务器,搜索航班,预订机票,检查飞行路线. 虽然 ...
- javascript this关键字指向详解
在之前写代码的经历中,常常试过写着写着this就莫名其妙的不知道指向到哪里去了.今天看了曾探的javascript设计模式,里面特别谈到了this在不同情况下指代的对象,非常有意思. this指代的情 ...
- win 7,win2008 无法给新建用户完全权限
明明把这个用户添加到管理员组了啊,为什么在运行一些程序时老是提示没有权限,实在是郁闷.在网上Google 了半天也没找到个所以然来. 后来发现是系统用户帐户控制搞的鬼,到 控制面板/用户帐户和家庭安全 ...
- Orcle基本语句(四)
--显示员工的编号,姓名,工资,工资级别,所在部门的名称;(使用emp表) SELECT * FROM emp; SELECT * FROM salgrade; SELECT * FROM dept; ...
- Django URL的命令空间
为避免在模板中使用URL的硬编码,可以使用{% url %}模板标签来解决 <li><a href="/task/{{ task.id }}/">{{ ta ...
- js 小工具-- 按长度截取字符串
function cutstr(str,len){ var temp; var icount = 0; var stren = ""; //这段正则表示匹配所有汉字以及全角字符 v ...
- Theme皮肤文件(json解析、多文件管理)
一 官方教程 http://developer.egret.com/cn/github/egret-docs/extension/EUI/skin/theme/index.html 二 thm主题文 ...
- MAC系统生成RSA公钥私钥
进入openssl然后主要就是三条命令: 1.genrsa -out rsa_private_key.pem 1024 这句是生成原始私钥文件 2.pkcs8 -topk8 -inform PEM - ...
- Linux常用命令1
jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有Java进程pid的命令. jps [ options ] [ host ...
- Lucene 工作原理 之倒排索引
1.简介 倒排索引源于实际应用中需要根据属性的值来查找记录.这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址.由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排 ...