关于Brush填充
前言
在使用GDI绘图时使用到Fill填充区域,遇见Brush做以下记录。
微软官方文档地址
一、抽象基类Brush
public abstract class Brush : MarshalByRefObject, ICloneable, IDisposable
由此可见这是个抽象类不能实例化使用,使用时需要根据需求实例化对应派生类。
派生类如下:
System.Drawing.Drawing2D.HatchBrush
System.Drawing.Drawing2D.LinearGradientBrush
System.Drawing.Drawing2D.PathGradientBrush
System.Drawing.SolidBrush
System.Drawing.TextureBrush
二、HatchBrush 类(阴影)
public sealed class HatchBrush : System.Drawing.Brush
{
//
// 摘要:
// 使用指定的 System.Drawing.Drawing2D.HatchBrush 枚举和前景色初始化 System.Drawing.Drawing2D.HatchStyle
// 类的新实例。
//
// 参数:
// hatchstyle:
// System.Drawing.Drawing2D.HatchStyle 值之一,表示此 System.Drawing.Drawing2D.HatchBrush
// 所绘制的图案。
//
// foreColor:
// System.Drawing.Color 结构,它表示此 System.Drawing.Drawing2D.HatchBrush 所绘制线条的颜色。
public HatchBrush(HatchStyle hatchstyle, Color foreColor);
//
// 摘要:
// 使用指定的 System.Drawing.Drawing2D.HatchBrush 枚举、前景色和背景色初始化 System.Drawing.Drawing2D.HatchStyle
// 类的新实例。
//
// 参数:
// hatchstyle:
// System.Drawing.Drawing2D.HatchStyle 值之一,表示此 System.Drawing.Drawing2D.HatchBrush
// 所绘制的图案。
//
// foreColor:
// System.Drawing.Color 结构,它表示此 System.Drawing.Drawing2D.HatchBrush 所绘制线条的颜色。
//
// backColor:
// System.Drawing.Color 结构,它表示此 System.Drawing.Drawing2D.HatchBrush 绘制的线条间空间的颜色。
public HatchBrush(HatchStyle hatchstyle, Color foreColor, Color backColor);
}
用阴影样式、前景色和背景色定义矩形画笔。 此类不能被继承。
HatchStyle 枚举了阴影部分的形态种类过多在此不一一展示。
//
// 摘要:
// 指定可用于 System.Drawing.Drawing2D.HatchBrush 对象的不同图案。
public enum HatchStyle
{
//
// 摘要:
// 水平线的图案。
Horizontal = 0,
//
// 摘要:
// 指定阴影样式 System.Drawing.Drawing2D.HatchStyle.Horizontal。
Min = 0,
//
// 摘要:
// 垂直线的图案。
Vertical = 1
。。。
}
案例代码:
using (Graphics g = this.CreateGraphics())
{
using (HatchBrush hBrush = new HatchBrush(HatchStyle.BackwardDiagonal, Color.White, Color.Black))
{
g.FillRectangle(hBrush, 1, 1, 100, 100);
}
}
效果图:
三、LinearGradientBrush 类(渐变)
public sealed class LinearGradientBrush : System.Drawing.Brush
{
//
// 摘要:
// 使用指定的点和颜色初始化 System.Drawing.Drawing2D.LinearGradientBrush 类的新实例。
//
// 参数:
// point1:
// 表示线性渐变起点的 System.Drawing.PointF 结构。
//
// point2:
// 表示线性渐变终点的 System.Drawing.PointF 结构。
//
// color1:
// 表示线性渐变起始色的 System.Drawing.Color 结构。
//
// color2:
// 表示线性渐变结束色的 System.Drawing.Color 结构。
public LinearGradientBrush(PointF point1, PointF point2, Color color1, Color color2);
//
// 摘要:
// 根据一个矩形、起始颜色和结束颜色以及方向模式,创建 System.Drawing.Drawing2D.LinearGradientBrush 类的新实例。
//
// 参数:
// rect:
// 指定线性渐变边界的 System.Drawing.RectangleF 结构。
//
// color1:
// 表示渐变起始色的 System.Drawing.Color 结构。
//
// color2:
// 表示渐变结束色的 System.Drawing.Color 结构。
//
// linearGradientMode:
// 指定渐变方向的 System.Drawing.Drawing2D.LinearGradientMode 枚举元素。 渐变方向决定渐变的起点和终点。 例如,LinearGradientMode.ForwardDiagonal
// 指定起点是矩形的左上角,而终点是矩形的右下角。
public LinearGradientBrush(RectangleF rect, Color color1, Color color2, LinearGradientMode linearGradientMode);
//
// 摘要:
// 根据一个矩形、起始颜色和结束颜色以及方向角度,创建 System.Drawing.Drawing2D.LinearGradientBrush 类的新实例。
//
// 参数:
// rect:
// 指定线性渐变边界的 System.Drawing.RectangleF 结构。
//
// color1:
// 表示渐变起始色的 System.Drawing.Color 结构。
//
// color2:
// 表示渐变结束色的 System.Drawing.Color 结构。
//
// angle:
// 渐变方向线的角度(以 X 轴的顺时针角度计算)。
public LinearGradientBrush(RectangleF rect, Color color1, Color color2, float angle);
//
// 摘要:
// 根据一个矩形、起始颜色和结束颜色以及方向角度,创建 System.Drawing.Drawing2D.LinearGradientBrush 类的新实例。
//
// 参数:
// rect:
// 指定线性渐变边界的 System.Drawing.RectangleF 结构。
//
// color1:
// 表示渐变起始色的 System.Drawing.Color 结构。
//
// color2:
// 表示渐变结束色的 System.Drawing.Color 结构。
//
// angle:
// 渐变方向线的角度(以 X 轴的顺时针角度计算)。
//
// isAngleScaleable:
// 设置为 true,指定角度受与此 System.Drawing.Drawing2D.LinearGradientBrush 关联的转换所影响;否则为 false。
public LinearGradientBrush(RectangleF rect, Color color1, Color color2, float angle, bool isAngleScaleable);
}
使用线性渐变来进行填充,渐变的规律方向由构造函数中(起始点,结束点,角度等)参数影响。
案例代码:
using (Graphics g = this.CreateGraphics())
{
using (LinearGradientBrush LBrush = new LinearGradientBrush(new Point(0, 0),new Point(200, 100), Color.White, Color.Black))
{
g.FillRectangle(LBrush, 0, 0, 200, 100);
}
}
此处构造函数的两个点位指示了渐变的方向(从左上角到右下角)由白变黑。
效果图:
四、PathGradientBrush类(中心往外)
public sealed class PathGradientBrush : Brush
{
//
// 摘要:
// 使用指定的点初始化 System.Drawing.Drawing2D.PathGradientBrush 类的新实例。
//
// 参数:
// points:
// 一个 System.Drawing.PointF 结构的数组,它表示构成路径的顶点的点。
public PathGradientBrush(PointF[] points);
//
// 摘要:
// 使用指定的路径初始化 System.Drawing.Drawing2D.PathGradientBrush 类的新实例。
//
// 参数:
// path:
// System.Drawing.Drawing2D.GraphicsPath,定义此 System.Drawing.Drawing2D.PathGradientBrush
// 填充的区域。
public PathGradientBrush(GraphicsPath path);
//
// 摘要:
// 使用指定的点和环绕模式初始化 System.Drawing.Drawing2D.PathGradientBrush 类的新实例。
//
// 参数:
// points:
// 一个 System.Drawing.PointF 结构的数组,它表示构成路径的顶点的点。
//
// wrapMode:
// 一个 System.Drawing.Drawing2D.WrapMode,指定使用此 System.Drawing.Drawing2D.PathGradientBrush
// 绘制的填充的平铺方式。
public PathGradientBrush(PointF[] points, WrapMode wrapMode);
}
颜色渐变是从路径的中心点到路径的外部边界边缘的平滑底纹。 混合因素、位置和样式会影响渐变开始和结束的位置,以及渐变变化的速度。
不同的图形,渐变的效果也不一样。
案例代码:
using (Graphics g = this.CreateGraphics())
{
using (GraphicsPath path = new GraphicsPath())
{
path.AddEllipse(new RectangleF(100, 100, 200, 100));
using (PathGradientBrush PBrush = new PathGradientBrush(path))
{
PBrush.CenterColor = Color.White;
PBrush.SurroundColors = new Color[] { Color.Black };
g.FillEllipse(PBrush, 100, 100, 200, 100);
}
}
}
效果图:
五、SolidBrush类(纯色)
//
// 摘要:
// 定义单色画笔。 画笔用于填充图形形状,如矩形、椭圆、扇形、多边形和封闭路径。 此类不能被继承。
public sealed class SolidBrush : Brush
{
//
// 摘要:
// 初始化指定颜色的新 System.Drawing.SolidBrush 对象。
//
// 参数:
// color:
// 一个 System.Drawing.Color 结构,它表示此画笔的颜色。
public SolidBrush(Color color);
}
定义单色画笔。 画笔用于填充图形形状,如矩形、椭圆、扇形、多边形和封闭路径。 此类不能被继承。
案例代码:
using (Graphics g = this.CreateGraphics())
{
using (SolidBrush SBrush = new SolidBrush(Color.GreenYellow))
{
g.FillEllipse(SBrush, 100, 100, 200, 100);
}
}
效果图:
六、TextureBrush类(图像)
//
// 摘要:
// System.Drawing.TextureBrush 类的每个属性都是 System.Drawing.Brush 对象,这种对象使用图像来填充形状的内部。
// 此类不能被继承。
public sealed class TextureBrush : Brush
{
//
// 摘要:
// 初始化使用指定图像的新 System.Drawing.TextureBrush 对象。
//
// 参数:
// bitmap:
// System.Drawing.Image 对象,此 System.Drawing.TextureBrush 对象使用它来填充其内部。
public TextureBrush(Image bitmap);
//
// 摘要:
// 初始化使用指定的图像和自动换行模式的新 System.Drawing.TextureBrush 对象。
//
// 参数:
// image:
// System.Drawing.Image 对象,此 System.Drawing.TextureBrush 对象使用它来填充其内部。
//
// wrapMode:
// 一个 System.Drawing.Drawing2D.WrapMode 枚举,它指定此 System.Drawing.TextureBrush 对象的平铺方式。
public TextureBrush(Image image, WrapMode wrapMode);
//
// 摘要:
// 初始化使用指定图像和边框的新 System.Drawing.TextureBrush 对象。
//
// 参数:
// image:
// System.Drawing.Image 对象,此 System.Drawing.TextureBrush 对象使用它来填充其内部。
//
// dstRect:
// 一个 System.Drawing.RectangleF 结构,它表示此 System.Drawing.TextureBrush 对象的边框。
public TextureBrush(Image image, RectangleF dstRect);
//
// 摘要:
// 初始化使用指定图像、自动换行模式和边框的新 System.Drawing.TextureBrush 对象。
//
// 参数:
// image:
// System.Drawing.Image 对象,此 System.Drawing.TextureBrush 对象使用它来填充其内部。
//
// wrapMode:
// 一个 System.Drawing.Drawing2D.WrapMode 枚举,它指定此 System.Drawing.TextureBrush 对象的平铺方式。
//
// dstRect:
// 一个 System.Drawing.RectangleF 结构,它表示此 System.Drawing.TextureBrush 对象的边框。
public TextureBrush(Image image, WrapMode wrapMode, RectangleF dstRect);
//
// 摘要:
// 初始化使用指定的图像、边框和图像特性的新 System.Drawing.TextureBrush 对象。
//
// 参数:
// image:
// System.Drawing.Image 对象,此 System.Drawing.TextureBrush 对象使用它来填充其内部。
//
// dstRect:
// 一个 System.Drawing.RectangleF 结构,它表示此 System.Drawing.TextureBrush 对象的边框。
//
// imageAttr:
// 一个 System.Drawing.Imaging.ImageAttributes 对象,它包含有关此 System.Drawing.TextureBrush
// 对象所使用的图像的附加信息。
public TextureBrush(Image image, RectangleF dstRect, ImageAttributes imageAttr);
}
案例代码:
using (Graphics g = this.CreateGraphics())
{
Bitmap bmp = (Bitmap)Bitmap.FromFile(@"C:\Users\ZDH-XMXT-257\Desktop\捕获.PNG");
using (TextureBrush TBrush = new TextureBrush(bmp))
{
g.FillEllipse(TBrush, 0, 0, 200, 200);
}
}
效果图: