版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
17.2.3 Brush类
Brush 类用于填充图形形状(如矩形、椭圆、饼形、多边形和封闭路径)的内部。这是一个抽象基类,不能进行实例化。如果若要创建一个画刷对象,应使用从 Brush 派生出的类,包括:
- SolidBrush类:单种颜色来填充形状的内部。
- TextureBrush类:使用图像来填充形状的内部。
- HatchBrush类:用阴影样式来填充形状的内部。
- LinearGradientBrush类:使用线性渐变来填充形状的内部。
- PathGradientBrush类:通过路径渐变来填充形状的内部。
注意:后面三种画刷都是在System.Drawing.Drawing2D命名空间下面。
17.2.3.1 SolidBrush类
SolidBrush构造函数:
- public SolidBrush( Color color )
参数说明:
- color:指定了画刷使用的颜色。
例如声明一个红色的画刷:
SolidBrush myBrush = new SolidBrush(Color.Red);
SolidBrush常用属性:
- Color:画笔使用的颜色。
【例 17.6】【项目:code17-006】使用SolidBrush填充图形。
private void button1_Click(object sender, EventArgs e)
{
//使用红色初始化画刷
SolidBrush myBrush = new SolidBrush(Color.Red);
//窗体上创建Graphics对象
Graphics g = this.CreateGraphics();
//使用窗体背景色清除
g.Clear(this.BackColor);
//使用画刷填充一个矩形
g.FillRectangle(myBrush, new Rectangle(10, 10, 120, 120));
//更改画刷颜色
myBrush.Color = Color.Blue;
//再次使用画刷填充矩形
g.FillRectangle(myBrush, new Rectangle(130, 10, 120, 120));
//释放资源
g.Dispose();
}
运行结果如下图所示:
图17-7 使用SolidBrush填充矩形
17.2.3.2 TextureBrush类
TextureBrush构造函数常用的一个重载版本:
public TextureBrush( Image image, WrapMode wrapMode )
参数说明:
- image:一个Image对象,此画刷将使用该Image来填充其内部。
- wrapMode:指定Image的平铺方式,这是一个WrapMode枚举,包含以下成员:
- Clamp:纹理或渐变没有平铺。
- Tile:平铺渐变或纹理。
- TileFlipX:水平反转纹理或渐变,然后平铺该纹理或渐变。
- TileFlipY:垂直反转纹理或渐变,然后平铺该纹理或渐变。
- TileFlipXY:水平和垂直反转纹理或渐变,然后平铺该纹理或渐变。
【例 17.7】【项目:code17-007】使用TextureBrush填充图形。
private void button1_Click(object sender, EventArgs e)
{
Bitmap bmp1 =new Bitmap("c:\\lessons\\g.png");
//使用图像平铺模式
TextureBrush myBrush =new TextureBrush(bmp1, System.Drawing.Drawing2D.WrapMode.Tile);
Graphics g = this.CreateGraphics();
g.Clear(this.BackColor);
g.FillRectangle(myBrush, new Rectangle(10, 10, 120, 120));
//更换平铺方式为水平和垂直反转
myBrush.WrapMode = System.Drawing.Drawing2D.WrapMode.TileFlipXY;
g.FillRectangle(myBrush, new Rectangle(130, 10, 120, 120));
g.Dispose();
}
运行结果如下图所示:
图17-8 使用TextureBrush填充矩形
17.2.3.3 HatchBrush类
HatchBrush构造函数常用的一个重载版本:
public HatchBrush( HatchStyle hatchstyle, Color foreColor, Color backColor )
参数说明:
- hatchstyle:此HatchBrush所绘制的图案。这是一个HatchStyle枚举。
- foreColor:Color结构,表示此HatchBrush所绘制线条的颜色。
- backColor:Color结构,表示此HatchBrush绘制的线条间空间的颜色。
【例 17.8】【项目:code17-008】使用HatchBrush填充图形。
由于HatchStyle枚举成员众多,这里在程序中显示每种图案。
int myHatchStyle = 0;
private void button1_Click(object sender, EventArgs e)
{
myHatchStyle += 1;
if (myHatchStyle == 53)
myHatchStyle = 0;
//使用不同的HatchStyle,红色前景色,白色背景色初始化HatchBrush
HatchBrush myBrush = new HatchBrush((HatchStyle)myHatchStyle, Color.Red, Color.White);
Graphics g = this.CreateGraphics();
g.Clear(this.BackColor);
g.FillRectangle(myBrush, new Rectangle(10, 10, 240, 120));
g.Dispose();
}
运行结果如下图所示:
图17-9 使用HatchBrush填充矩形时的一种HatchStyle图案
17.2.3.4 LinearGradientBrush类
LinearGradientBrush构造函数常用的一个重载版本:
public LinearGradientBrush( Point point1, Point point2, Color color1, Color color2 )
参数说明:
- point1:表示线性渐变起始点的Point结构。
- point2:表示线性渐变终结点的Point结构。
- color1:表示线性渐变起始色的Color结构。
- color2:表示线性渐变结束色的Color结构。
常用属性:
- Blend:指定定义渐变自定义过渡的位置和因子。
- GammaCorrection:指示是否启用了灰度校正。
- InterpolationColors:定义多色线性渐变的ColorBlend类。
- LinearColors:渐变的起始色和结束色。
注意:如果设置了InterpolationColors属性,那么ColorBlend类的Colors和Positions两个属性必须设置相同数量,而且,确保Positions中数组的值从0开始,1结束,例如:
Color[] c={ Color.Red, Color.White, Color.Blue, Color.White, Color.Green };
Single[] p = { 0, 0.25f, 0.5f, 0.75f, 1.0f};
【例 17.9】【项目:code17-009】使用LinearGradientBrush填充图形。
//生成红-白渐变的矩形
private void button1_Click(object sender, EventArgs e)
{
LinearGradientBrush myBrush = new LinearGradientBrush(new Point(0, 0), new Point(100, 0), Color.Red, Color.White);
Graphics g = this.CreateGraphics();
g.Clear(this.BackColor);
g.FillRectangle(myBrush, new Rectangle(10, 10, 300, 120));
g.Dispose();
}
//生成红-白-蓝-白-绿渐变的矩形
private void button2_Click(object sender, EventArgs e)
{
LinearGradientBrush myBrush = new LinearGradientBrush(new Point(0, 0), new Point(100, 0), Color.Red, Color.White);
ColorBlend myColorBlend = new ColorBlend();
Color[] c={ Color.Red, Color.White, Color.Blue, Color.White, Color.Green };
Single[] p = { 0, 0.25f, 0.5f, 0.75f, 1.0f};
myColorBlend.Colors = c;
myColorBlend.Positions = p;
myBrush.InterpolationColors = myColorBlend;
Graphics g = this.CreateGraphics();
g.Clear(this.BackColor);
g.FillRectangle(myBrush, new Rectangle(10, 10, 300, 120));
g.Dispose();
}
运行结果如下图所示:
图17-10 使用LinearGradientBrush填充矩形
17.2.3.5 PathGradientBrush类
PathGradientBrush构造函数常用的一个重载版本:
public PathGradientBrush( GraphicsPath path )
参数说明:
- path:GraphicsPath类型,定义此 PathGradientBrush 填充的区域。
PathGradientBrush常用属性:
- Blend:指定定义渐变自定义过渡的位置和因子。
- CenterColor:路径渐变的中心处的颜色。
- CenterPoint:路径渐变的中心点,如果没有指定,那么将自动使用
- SurroundColors:此PathGradientBrush填充的路径中的点相对应的颜色的数组。
- WrapMode:指定渐变图像的平铺方式。这是一个WrapMode枚举(请参看第17.2.3.2节),默认是Clamp(不平铺)。
【例 17.10】【项目:code17-010】使用PathGradientBrush填充图形。
private void button1_Click(object sender, EventArgs e)
{
//声明一个GraphicsPath类
GraphicsPath path =new GraphicsPath();
//向此路径添加一个矩形
path.AddRectangle(new RectangleF(10, 10, 120, 120));
//使用之前声明的路径初始化画刷
PathGradientBrush myBrush = new PathGradientBrush(path);
//定义环绕颜色数组
Color[] myColor = { Color.Red, Color.Green, Color.Blue, Color.Yellow};
//设置环绕颜色
myBrush.SurroundColors = myColor;
//设置中心点颜色
myBrush.CenterColor = Color.White;
//设置渐变中心点
myBrush.CenterPoint = new Point(50, 50);
//设置填充区域内渐变的平铺方式
myBrush.WrapMode = WrapMode.Tile;
Graphics g = this.CreateGraphics();
g.Clear(this.BackColor);
//再声明一个GraphicsPath类
GraphicsPath pathtoFill =new GraphicsPath();
//向此路径添加一个矩形
pathtoFill.AddRectangle(new RectangleF(10, 10, 240, 120));
//使用画刷填充路径
g.FillPath(myBrush, pathtoFill);
g.Dispose();
}
运行结果如下图所示:
图17-11 使用PathGradientBrush填充矩形
学习更多vb.net知识,请参看vb.net 教程 目录
学习更多C#知识,请参看C#教程 目录