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

本文介绍了使用GDI+进行绘图的基本技巧,包括如何控制Pen对象的各种属性,如线宽、线型、线帽及连接样式等;并探讨了如何使用Brush对象填充图形,涉及纹理、线性渐变及图案填充等多种方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在谈到绘制图形时,钢笔和笔刷是最基本的工具。在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);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值