GDI+基础知识三 钢笔(pen)和笔刷(brush) 1

来源:互联网 发布:learning python mobi 编辑:程序博客网 时间:2024/06/11 01:32

在谈到绘制图形时,钢笔和笔刷是最基本的工具。在Graphics类中,大多数函数都需要使用Pen或Brush对象,在GDI+中,Pen类主要用于绘制直线、曲线和图形的边框,而Brush类以各种颜色和图案填充或描绘图形。这两个类在GDI+中使用非常频繁。

首先看Pen类,主要介绍:

不同线宽度的钢笔

绘制实线、点画线和虚线的钢笔,以及如何配置这些样式

绘制带箭头和其他形状的线段的钢笔

连接线段的不同方式

然后是Brush类,主要介绍:

纹理笔刷的行为,以及如何使用它们

如何使用线性渐变笔刷给自定义控件绘制平滑而时尚的外观

如何使用HatchBrush类以指定的图案填充某个区域

最后将描述如何使用笔刷创建钢笔。这个技术允许使用笔刷类型的样式执行钢笔的类型操作,为创建各种类型的效果提供了更大的灵活性。

1.控制钢笔的属性

先创建一个最简单的例子,在vs中新建一个windows窗体应用程序,事件面板中双击进入Paint事件,添加如下代码:

Graphics g = e.Graphics;          //创建Graphics对象,为绘图做准备
            g.FillRectangle(Brushes.White, this.ClientRectangle);//将客户区域设置为白色
            Pen p = new Pen(Color.Black, 5); //设置钢笔颜色为黑色,宽度为5,可以F12看看Pen的构造函数有哪些
            g.DrawLine(p, 10, 10, 50, 50);   //使用钢笔画一条线段,起点坐标(10,10),终点坐标(50,50)
            p.Dispose();                     //释放钢笔所用资源
            g.Dispose();     

效果图:

实际上,Pen类有两个构造函数,各两种方式

第一个构造函数的两种方式:

//Specified color,default width(1px)

Pen p1 = new Pen(myColor);

//Specified color, Specified width(px)

Pen P2 = new Pen(myColor, myWidth);

第二个构造函数的两种方式:(合并使用钢笔和笔刷的功能)

Pen p3 = new Pen(myBrush);

Pen p4 = new Pen(myBrush,myWidth);

2.绘制短划线

//关键部分的代码

Pen p = new Pen(Color.Black, 5);

p.DashStyle = DashStyle.Dash;

g.DrawLine(p, 3, 3, 100, 3);

效果图:

DashStyle枚举由System.Drawing.Drawing2D命名空间提供,它提供了5个预定义的样式:Solid、Dash、DashDot、DashDotDot和Dot。可以自己尝试下。

短划线也可以自己定制,方法是使用一个整数数组,描述短线以及短线之间距离的像素长度,如:

Graphics  g = e.Graphics;

g.FillRectangle(Brushes.White, this.ClientRectangle);

Pen p = new Pen(Color.Black, 2);

     float[] f = {15, 5, 10, 5};

p.DashPattern = f;

g.DrawRectangle(p, 10, 10, 80,100);

p.Dispose();

g.Dispose();

效果图:

线宽改成5或更大时会有惊喜,试试!

3.箭头和其他线段端部图形

使用line cap可以指定GDI+如何装饰线段的开始和结尾。事实上这表示把值赋予Pen对象的StartCap和EndCap属性。

Pen p = new Pen(Color.Black, 10);

p.StartCap = LineCap.Round;

p.EndCap = LineCap.ArrowAnchor;

g.DrawLine(p,30,30,80,30);

效果图:

   可用线段端部和他们的外观:

4.连接线段

线段之间的连接,主要是设置连接处的样式,System.Drawing.Drawing2D命名空间中LineJoin枚举了四个值:Miter(默认值)、Beveled、MiterClipped和Round。下面将使用Round值绘制一个矩形:

Pen p = new Pen(Color.Black, 10);

p.LineJoin = LineJoin.Round;

e.Graphics.DrawRectangle(p, 20, 20, 60, 60);

p.Dispose();

如图,矩形带有圆角


Pens类

为了方便,GDI+提供了141中预定义的彩色钢笔,对应于Color结构中预定义的141种颜色,使用预定义的钢笔会有一些性能上的优势,由于使用Pens类时没有创建对象,所以不需要释放资源。例如绘制一个。略带桃色的矩形:

Graphics g = e.Graphics;

g.FillRectangle(Brushes.White, this.ClientRectangle);

g.DrawRectangle(Pens.MistyRose, 20, 20, 40, 40);

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一字螺丝钉脱扣拧不下来怎么办 一字螺丝拧花了怎么办 小螺丝卸不下来怎么办 机油螺丝滑丝了怎么办 刚滑双板膝盖滑的疼怎么办 lv包真皮弄脏了怎么办 lv包压变形了怎么办 lv的包包被压了怎么办 固态硬盘太小了怎么办 联想笔记本网络连接不可用怎么办 联想g50玩dnf卡怎么办 手机有wifi电脑没有网怎么办 电脑网卡被禁用了怎么办 win8系统装win7蓝屏怎么办 联想笔记本装win7蓝屏怎么办 联想g40-70开机黑屏怎么办 新主机开不了机怎么办 联想720s笔记本闪屏怎么办 华硕k40ie显卡坏了怎么办 开机黑屏进入bois后怎么办 2根内存条不兼容怎么办 联想笔记本r720系统崩溃怎么办 联想天逸310卡怎么办 新买的鼠标没反应怎么办 联想笔记本触屏鼠标失灵怎么办 无线鼠标接收器丢了怎么办 联想笔记本系统重装失败怎么办 联想笔记本屏幕闪屏怎么办 种植牙螺钉掉了怎么办 水管牙断里面了怎么办 水龙头起泡器不起泡怎么办 14mm乘8mm残留怎么办 宝宝吃了螺丝冒怎么办 收割机滚筒皮带轮键槽滚了怎么办 微信界面变小了怎么办 拉杆箱螺丝掉了怎么办 洗衣机应急门锁没有拉绳怎么办? 奔驰glc发动机声音大怎么办 淋膜机模具螺丝拧不动怎么办 一字螺丝滑丝了怎么办 螺丝拧歪卡住了怎么办