GDI+入门系列(二)——Brush简介

来源:互联网 发布:恶意软件 编辑:程序博客网 时间:2024/05/23 01:12

此系列的文章,是公司的学习资料中找到,不知道是哪位仁兄总结,作为入门教程,拿出来分享。实例都比较简单,不多说,直接贴代码,并会适当加些注释:

 

 

Brush 画刷

SolidBrush 定义单色画笔。画笔用于填充图形形状,如矩形、椭圆、扇形、多边形和封闭路径

TextureBrush 类的每个属性都是 Brush 对象,这种对象使用图像来填充形状的内部。无法继承此类。

LinearGradientBrush 该类封装双色渐变和自定义多色渐变。

PathGradientBrush应用程序使用路径来绘制形状的轮廓、填充形状内部和创建剪辑区域。

HatchBrush 用阴影样式、前景色和背景色定义矩形画笔。

 

 

二、画刷的使用

 

      using System.Drawing;

      using System.Drawing.Drawing2D;

      using System.Drawing.Imaging;

 

      public Form1()

        {

            InitializeComponent();

            comboBox1.SelectedIndex = 0;

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            Bitmap bp = new Bitmap("1.jpg");

            TextureBrush tb = new TextureBrush(bp);

            Graphics g = this.CreateGraphics();

            g.FillRectangle(tb, this.ClientRectangle);

            bp.Dispose();

            tb.Dispose();

            g.Dispose();

        }

 

        private void button2_Click(object sender, EventArgs e)

        {

            Bitmap bp = new Bitmap("1.jpg");

            TextureBrush tb = new TextureBrush(bp, new Rectangle(0, 0, 100, 100));

            Graphics g = this.CreateGraphics();

            switch (comboBox1.SelectedItem.ToString().Trim())

            {

                case "Clamp":

                    tb.WrapMode = WrapMode.Clamp;

                    g.FillRectangle(tb, this.ClientRectangle);

                    bp.Dispose();

                    tb.Dispose();

                    g.Dispose();

                    break;

                case "Tile":

                    tb.WrapMode = WrapMode.Tile;

                    g.FillRectangle(tb, this.ClientRectangle);

                    bp.Dispose();

                    tb.Dispose();

                    g.Dispose();

                    break;

                case "TileFlipX":

                    tb.WrapMode = WrapMode.TileFlipX;

                    g.FillRectangle(tb, this.ClientRectangle);

                    bp.Dispose();

                    tb.Dispose();

                    g.Dispose();

                    break;

                case "TileFlipXY":

                    tb.WrapMode = WrapMode.TileFlipXY;

                    g.FillRectangle(tb, this.ClientRectangle);

                    bp.Dispose();

                    tb.Dispose();

                    g.Dispose();

                    break;

                case "TileFlipY":

                    tb.WrapMode = WrapMode.TileFlipY;

                    g.FillRectangle(tb, this.ClientRectangle);

                    bp.Dispose();

                    tb.Dispose();

                    g.Dispose();

                    break;

            }

        }

 

        private void button3_Click(object sender, EventArgs e)

        {

            Bitmap bp = new Bitmap("1.jpg");           

            float[][] matrixitems ={

                                    new float[]{0.2f,0,0,0,0},

                                    new float[]{0,0.8f,0,0,0},

                                    new float[]{0,0,1,0,0},

                                    new float[]{0,0,0,1,0},

                                    new float[]{0,0,0,0,1},

                                    };

            ColorMatrix colotMatrix = new ColorMatrix(matrixitems);

 

            ImageAttributes imgAtt = new ImageAttributes();

            imgAtt.SetColorMatrix(colotMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);

            TextureBrush tb = new TextureBrush(bp,new Rectangle(0,0,bp.Width,bp.Height),imgAtt);

            tb.WrapMode = WrapMode.Tile;

            Graphics g = this.CreateGraphics();

            g.FillRectangle(tb, this.ClientRectangle);

            bp.Dispose();

            tb.Dispose();

            g.Dispose();

        }

 

        private void button4_Click(object sender, EventArgs e)

        {

            Graphics g = this.CreateGraphics();

            LinearGradientBrush lgb = new LinearGradientBrush(new Point(0, 0), new Point(300, 300), Color.Wheat, Color.Black);

            g.FillRectangle(lgb, this.ClientRectangle);

            g.Dispose();

            lgb.Dispose();

        }

 

        private void button5_Click(object sender, EventArgs e)

        {

            Graphics g = this.CreateGraphics();

            GraphicsPath gp = new GraphicsPath();

            gp.AddLine(10, 10, 110, 15);

            gp.AddLine(110,15,100,96);

            gp.AddLine(100, 96, 15, 110);

            gp.CloseFigure();

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

            g.DrawPath(Pens.AntiqueWhite, gp);

            gp.Dispose();

        }

 

        private void button6_Click(object sender, EventArgs e)

        {

            Graphics g = this.CreateGraphics();

            GraphicsPath gp = new GraphicsPath();

            gp.AddLine(10, 10, 110, 15);

            gp.AddLine(110, 15, 100, 96);

            gp.AddLine(100, 96, 15, 110);

            gp.CloseFigure();

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

            g.SmoothingMode = SmoothingMode.AntiAlias;

            PathGradientBrush pgb = new PathGradientBrush(gp);

            pgb.CenterColor = Color.White;

            pgb.SurroundColors=new Color[]

            {

                //Color.Yellow,

                Color.Blue

                //Color.Yellow,

                //Color.Red

            };

            g.FillPath(pgb,gp);

            g.DrawPath(Pens.Blue,gp);

            pgb.Dispose();

            gp.Dispose();

        }

 

        private void button7_Click(object sender, EventArgs e)

        {

            Graphics g = this.CreateGraphics();

            HatchBrush hb = new HatchBrush(HatchStyle.Cross, Color.White, Color.Blue);

            g.FillRectangle(hb, this.ClientRectangle);

            hb.Dispose();

        }

 

        private void button8_Click(object sender, EventArgs e)

        {

            Graphics g=this.CreateGraphics();

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

            HatchBrush hb = new HatchBrush(HatchStyle.WideUpwardDiagonal,

                Color.White,

                Color.Black);

            Pen p = new Pen(hb, 8);

            g.DrawRectangle(p, 15, 15, 70, 70);

            hb.Dispose();

            p.Dispose();

            g.Dispose();

        }

 

说明:

1. button1_Click用简单的方式对工作窗口进行填充

this.ClientRectangle当前的工作窗口

 

 

2. button2_Click:更改TextureBrush画刷的平铺方式

Tile 平铺渐变或纹理。

 TileFlipX 水平反转纹理或渐变,然后平铺该纹理或渐变。

 TileFlipY 垂直反转纹理或渐变,然后平铺该纹理或渐变。

 TileFlipXY 水平和垂直反转纹理或渐变,然后平铺该纹理或渐变。

 Clamp 纹理或渐变没有平铺。

Clamp

 

button3_Click颜色矩阵的使用

ColorMatrix:定义包含 RGBA 空间坐标的 5 x 5 矩阵。ImageAttributes 类的若干方法通过使用颜色矩阵调整图像颜色。

ImageAttributes 对象包含有关在呈现时如何操作位图和图元文件颜色的信息。ImageAttributes 对象维护多个颜色调整设置,包括颜色调整矩阵、灰度调整矩阵、灰度校正值、颜色映射表和颜色阈值。呈现过程中,可以对颜色进行校正、调暗、调亮和移除。要应用这些操作,应初始化一个 ImageAttributes 对象,并将该 ImageAttributes 对象的路径(连同 Image 的路径)传递给 DrawImage 方法。

 

button5_ClickGraphicsPath表示一系列相互连接的直线和曲线

CloseFigure闭合当前图形并开始新的图形。如果当前图形包含一系列相互连接的直线和曲线,该方法通过连接一条从终结点到起始点的直线,闭合该环回。

button6_ClickPathGradientBrush渐变填充 GraphicsPath 对象的内部

CenterColor中心颜色

SurroundColors周围渐进颜色

button7_ClickHatchBrush画刷使用

HatchStyle :填充样式

Horizontal 水平线的图案。

 Vertical 垂直线的图案。

 ForwardDiagonal 从左上到右下的对角线的线条图案。

 BackwardDiagonal 从右上到左下的对角线的线条图案。

 Cross 指定交叉的水平线和垂直线。

 DiagonalCross 交叉对角线的图案。

 Percent05 指定 5% 阴影。前景色与背景色的比例为 5:100

 Percent10 指定 10% 阴影。前景色与背景色的比例为 10:100

 Percent20 指定 20% 阴影。前景色与背景色的比例为 20:100

 Percent25 指定 25% 阴影。前景色与背景色的比例为 25:100

 Percent30 指定 30% 阴影。前景色与背景色的比例为 30:100

 Percent40 指定 40% 阴影。前景色与背景色的比例为 40:100

 Percent50 指定 50% 阴影。前景色与背景色的比例为 50:100

 Percent60 指定 60% 阴影。前景色与背景色的比例为 60:100

 Percent70 指定 70% 阴影。前景色与背景色的比例为 70:100

 Percent75 指定 75% 阴影。前景色与背景色的比例为 75:100

 Percent80 指定 80% 阴影。前景色与背景色的比例为 80:100

 Percent90 指定 90% 阴影。前景色与背景色的比例为 90:100

 LightDownwardDiagonal 指定从顶点到底点向右倾斜的对角线,其两边夹角比 ForwardDiagonal 50%,但它们不是锯齿消除的。

 LightUpwardDiagonal 指定从顶点到底点向左倾斜的对角线,其两边夹角比 BackwardDiagonal 50%,但这些直线不是锯齿消除的。

 DarkDownwardDiagonal 指定从顶点到底点向右倾斜的对角线,其两边夹角比 ForwardDiagonal 50%,宽度是其两倍。此阴影图案不是锯齿消除的。

 DarkUpwardDiagonal 指定从顶点到底点向左倾斜的对角线,其两边夹角比 BackwardDiagonal 50%,宽度是其两倍,但这些直线不是锯齿消除的。

 WideDownwardDiagonal 指定从顶点到底点向右倾斜的对角线,其间距与阴影样式 ForwardDiagonal 相同,宽度是其三倍,但它们不是锯齿消除的。

 WideUpwardDiagonal 指定从顶点到底点向左倾斜的对角线,其间距与阴影样式 BackwardDiagonal 相同,宽度是其三倍,但它们不是锯齿消除的。

 LightVertical 指定垂直线的两边夹角比 Vertical 50%

 LightHorizontal 指定水平线,其两边夹角比 Horizontal 50%

 NarrowVertical 指定垂直线的两边夹角比阴影样式 Vertical 75%(或者比 LightVertical 25%)。

 NarrowHorizontal 指定水平线的两边夹角比阴影样式 Horizontal 75%(或者比 LightHorizontal 25%)。

 DarkVertical 指定垂直线的两边夹角比 Vertical 50% 并且宽度是其两倍。

 DarkHorizontal 指定水平线的两边夹角比 Horizontal 50% 并且宽度是 Horizontal 的两倍。

 DashedDownwardDiagonal 指定虚线对角线,这些对角线从顶点到底点向右倾斜。

 DashedUpwardDiagonal 指定虚线对角线,这些对角线从顶点到底点向左倾斜。

 DashedHorizontal 指定虚线水平线。

 DashedVertical 指定虚线垂直线。

 SmallConfetti 指定带有五彩纸屑外观的阴影。

 LargeConfetti 指定具有五彩纸屑外观的阴影,并且它是由比 SmallConfetti 更大的片构成的。

 ZigZag 指定由 Z 字形构成的水平线。

 Wave 指定由代字号“~”构成的水平线。

 DiagonalBrick 指定具有分层砖块外观的阴影,它从顶点到底点向左倾斜。

 HorizontalBrick 指定具有水平分层砖块外观的阴影。

 Weave 指定具有织物外观的阴影。

 Plaid 指定具有格子花呢材料外观的阴影。

 Divot 指定具有草皮层外观的阴影。

 DottedGrid 指定互相交叉的水平线和垂直线,每一直线都是由点构成的。

 DottedDiamond 指定互相交叉的正向对角线和反向对角线,每一对角线都是由点构成的。

 Shingle 指定带有对角分层鹅卵石外观的阴影,它从顶点到底点向右倾斜。

 Trellis 指定具有格架外观的阴影。

 Sphere 指定具有球体彼此相邻放置的外观的阴影。

 SmallGrid 指定互相交叉的水平线和垂直线,其两边夹角比阴影样式 Cross 50%

 SmallCheckerBoard 指定带有棋盘外观的阴影。

 LargeCheckerBoard 指定具有棋盘外观的阴影,棋盘所具有的方格大小是 SmallCheckerBoard 大小的两倍。

 OutlinedDiamond 指定互相交叉的正向对角线和反向对角线,但这些对角线不是锯齿消除的。

 SolidDiamond 指定具有对角放置的棋盘外观的阴影。

 LargeGrid 指定阴影样式 Cross

 Min 指定阴影样式 Horizontal

 Max 指定阴影样式 SolidDiamond