GDI+画刷的使用

        本文参考自  http://blog.csdn.net/bobui/article/details/5136643

          private void button1_Click(object sender, EventArgs e)                         //简单的画刷使用
        {
            Bitmap bmp = new Bitmap(Application.StartupPath + "//1.jpg");
            Graphics g = this.CreateGraphics();
            TextureBrush tb = new TextureBrush(bmp);//使用对象来填充形状的内部
            g.FillRectangle(tb, this.ClientRectangle);
            g.Dispose();
            tb.Dispose();//释放掉占用的资源
        }

     

         private void button2_Click(object sender, EventArgs e)            //画刷对象的换行模式
        {
            Bitmap bmp = new Bitmap(Application.StartupPath + "//1.jpg");
            Graphics g = this.CreateGraphics();
            TextureBrush tb = new TextureBrush(bmp);
            switch (comboBox1.SelectedItem.ToString())
            {
                case "Clamp":
                    tb.WrapMode = WrapMode.Clamp;//纹理或渐变没有平铺
                    g.FillRectangle(tb, this.ClientRectangle);
                    g.Dispose();
                    tb.Dispose();
                    break;
                case"Tile":
                    tb.WrapMode = WrapMode.Tile;//铺平渐变或纹理
                    g.FillRectangle(tb, this.ClientRectangle);
                    g.Dispose();
                    tb.Dispose();
                    break;
                case"TileFlipX":
                    tb.WrapMode = WrapMode.TileFlipX;//水平反转纹理或渐变,然后在平铺纹理或渐变
                    g.FillRectangle(tb, this.ClientRectangle);
                    g.Dispose();
                    tb.Dispose();
                    break;
                case"TileFlipY":
                    tb.WrapMode = WrapMode.TileFlipY;//垂直反转纹理或渐变,然后在平铺纹理或渐变
                    g.FillRectangle(tb, this.ClientRectangle);
                    g.Dispose();
                    tb.Dispose();
                    break;
                case"TileFlipXY":
                    tb.WrapMode = WrapMode.TileFlipXY;//水平和垂直反转纹理或渐变,然后平铺该纹理或渐变
                    g.FillRectangle(tb, this.ClientRectangle);
                    g.Dispose();
                    tb.Dispose();
                    break;
            }
        }


      效果图依次如下:

    

     

    

    

  


  private void button3_Click(object sender, EventArgs e) //用颜色矩阵来调节图片
        {
            Bitmap bmp = new Bitmap(Application.StartupPath + "//1.jpg");
            Graphics g = this.CreateGraphics();
            float[][] matrix ={
                                  new float[]{0.2f,0.0f,0.0f,0.0f,0.0f},
                                  new float[]{0.0f,1.0f,0.0f,0.0f,0.0f},
                                  new float[]{0.0f,0.0f,1.0f,0.0f,0.0f},
                                  new float[]{0.0f,0.0f,0.0f,0.5f,0.0f},
                                  new float[]{0.0f,0.0f,0.0f,0.0f,0.0f}
                             };
            ColorMatrix colorMatrix = new ColorMatrix(matrix);
            ImageAttributes imgAtt = new ImageAttributes();
            imgAtt.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
            TextureBrush tb = new TextureBrush(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height), imgAtt);
            //用指定的bmp文件,相应的边框信息和(imgAtt)包含TextureBrush所使用的图像的附加信息实例化tb
            tb.WrapMode = WrapMode.Tile;
            g.FillRectangle(tb, this.ClientRectangle);
        }

    效果图如下:


   下面给大家讲下颜色矩阵的含义 5*5矩阵 第一行至第五行分别代表红色,绿色,蓝色,alpha透明度,虚拟位,一般情况下都是调节对角线上的颜色值来改变图片的颜色。

 C#貌似是用32位来表示颜色的属性的 24位颜色值和8位透明度的值,编程中,也习惯用1来表示255 。例如,(0,1,0,1)表示没有红色和蓝色,绿色值达到最大透明度最大,这边透明度为1的时候,表示的是图片原来的颜色属性,大家可以用QQ面板上的调节透明度的功能来测试下透明度的效果。

  注:本人也是在最近才查了资料,对颜色矩阵有了个大概的了解,如果讲解的有偏差,还望告诉本人,我会即时更新,以便少出错误,谢谢。


  private void button4_Click(object sender, EventArgs e)
        {
            Graphics g = this.CreateGraphics();
            LinearGradientBrush lgb = new LinearGradientBrush(new Point(0, 0), new Point(150, 150), Color.Wheat, Color.Blue);
            //由坐标(0,0)指向(150,150)由wheat颜色逐渐变成blue颜色
            g.FillRectangle(lgb,this.ClientRectangle);
            g.Dispose();
        }

  

 

private void button5_Click(object sender, EventArgs e)
        {
            Graphics g = this.CreateGraphics();
            GraphicsPath gp = new GraphicsPath();
            gp.AddLine(110, 110, 150, 15);//向gp追加一条线段
            gp.AddLine(150, 15, 100, 96);
            gp.AddLine(100, 96, 15, 110);
            gp.CloseFigure();//闭合当前的图形
            g.FillRectangle(Brushes.Blue, 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(50,50,100,100);
            gp.AddLine(100, 100, 50, 150);
            gp.AddLine(50, 150, 0, 100);
            gp.CloseFigure();
            PathGradientBrush pgb = new PathGradientBrush(gp);//通过渐变来填充gp
            pgb.CenterColor = Color.White;//pgb的中心颜色
            pgb.SurroundColors = new Color[] //pgb的外围 颜色
            {
               Color.Blue
            };
            g.SmoothingMode = SmoothingMode.AntiAlias;//消除锯齿
            g.FillRectangle(pgb, this.ClientRectangle);
            g.Dispose();
        }

效果图如下:

private void button7_Click(object sender, EventArgs e)
        {
            Graphics g = this.CreateGraphics();
            HatchBrush hb = new HatchBrush(HatchStyle.Cross, Color.Blue, Color.Red);
            g.FillRectangle(hb, this.ClientRectangle);
            g.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.Blue, Color.Red);
            Pen p = new Pen(hb, 7);
            g.DrawRectangle(p, 20, 20, 50, 50);
        }

效果图如下:

  大家可以用我这代码自己找张图片试试看效果,效果其实也很明显的。 谁有好的建议 请提出来,谢谢喽。

本人 QQ521070107 王永鹏

     

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值