关于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);
                }
            }

效果图:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值