GDI+基础知识三 钢笔(pen)和笔刷(brush)2

用Brush对象填充

GDI+的Brush类本身是抽象类,不能直接实例化,所以GDI+API 提供了一下五个类,来扩展Brush,并提供了具体的实现,如下:

下面简单实现一些例子。

1.SolidBrush类

SolidBrush用纯色来填充图像。

Graphics g = e.Graphics;        
        g.FillRectangle(Brushes.White, this.ClientRectangle);
   

SolidBrush b = new SolidBrush(Color.Crimson); //实例化该笔刷
        g.FillRectangle(b, 20, 20, 40, 40);
        b.Dispose();

效果图:

2.TextureBrush类

TextBrush对象用基于光栅的图像来填充图形。图像可以是来自.bmp、.jpg或.png的图像。使用Bitmap类可以从文件中获取图像。

//TextureBrush的基本平铺效果

Graphics g = e.Graphics;
            g.FillRectangle(Brushes.White, this.ClientRectangle);    //可以不要
            Bitmap bmp = new Bitmap("C:\\Users\\ZQNB\\Desktop\\abc.png");//获取图片路径有多种方式
            TextureBrush tb = new TextureBrush(bmp);              //实例化TextureBrush对象

            g.FillRectangle(tb, 20, 20, 2
50,100);          //使用tb对象填充矩形
            bmp.Dispose();
            tb.Dispose();
  

    效果图:

注意:矩形的左上角像素是(20,20),矩形的左上角只有abc.png图像的一部分。原因是,TextureBrush对象在填充矩形时,把图像用作一个平铺图片,默认从像素(0,0)开始平铺图片,所以在矩形中只看到部分的平铺图片。后面会讲如何修改平铺起点像素。

在g.FillRectangle(tb, 20, 20, 250, 100);后面添加一行代码:

g.FillRectangle(tb, 45, 45, 150, 200);

自己看看效果

下面说一些效果,不贴图了,自己可以试试:

TextureBrush tb = new TextureBrush(bmp, new Rectangle(0, 0, 40, 40));//截取图像左上角的一个小矩形作为平铺图片,使用重载构造函数。

使用TextureBrush对象的WrapMode属性可以改变图片的平铺方式。GDI+提供了WrapMode枚举,包含:Tile、Clamp、TileFlipX、TileFlipY和TileFlipXY。默认使用Tile。

Graphics g = e.Graphics;
            Bitmap bmp = new Bitmap("C:\\Users\\ZQNB\\Desktop\\abc.png");
            TextureBrush tb = new TextureBrush(bmp);

            tb.WrapMode = WrapMode.
TileFlipX;   //使用WrapMode的枚举值
            g.FillRectangle(tb, this.ClientRectangle);
            bmp.Dispose();
            tb.Dispose();

如图:相邻的两个图片会翻转。


3.LinearGradientBrush类

LinearGradientBrush对象用颜色线性渐变填充图形。实际上可以多色渐变,这里只说两色的,有不同的方式描述渐变线:可以指定两个点、或一个矩形和一个角度。

使用两个点的方式:

首先提供两个点,作为渐变起止点,两种颜色,作为起止颜色,实例化LinearGradientBrush对象,关键代码如下:

Graphics g = e.Graphics;
            LinearGradientBrush lgb = new LinearGradientBrush(
                new Point(0, 0),
                new Point(50, 10),
                Color.White,
                Color.Black);
            g.FillRectangle(lgb, this.ClientRectangle);
            lgb.Dispose();

效果如图:

使用矩形描述渐变:

需要指定一个矩形、一个角度和两种颜色,如:

LinearGradientBrush lgb = new LinearGradientBrush(
                new Rectangle(0, 0, 50, 50),
                Color.White,
                Color.Black,
                75f);

效果如下:

如果要尝试多色渐变,可以使用LinearGradientBrush类的SetInterpolationColors方法,它需要一个渐变颜色的数组、一个表示位置的数字数组和一个整数,表示该序列中设置的颜色总数。


4.PathGradientBrush类

PathGradientBrush对象提供了一个用颜色渐变填充图形的笔刷。

示例代码:

Graphics g = e.Graphics;
            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.White, this.ClientRectangle);
            g.SmoothingMode = SmoothingMode.AntiAlias;          //反锯齿效果

            PathGradientBrush pgb = new PathGradientBrush(gp);  //从GraphicsPath对象创建PathGradientBrush对象
            pgb.CenterColor = Color.White;                     
            pgb.SurroundColors = new Color[]{  
                Color.Blue,
                Color.Red,
                Color.Green,
                Color.Yellow
            };
            g.FillPath(pgb, gp);
            g.DrawPath(Pens.Black, gp);
            pgb.Dispose();
            gp.Dispose();
            g.Dispose();

效果图:


5.HatchBrush类

HatchBrush类提供的笔刷可以用各种图案填充图形。影线笔刷的填充图案总是16像素*16像素的双色图案。通过HatchStyle枚举可以设置影线样式。如下将HatchStyle设置为Cross图案,然后填充客户区域:

Graphics g = e.Graphics;
            HatchBrush hb = new HatchBrush(
                HatchStyle.Cross,
                Color.White,
                Color.Black);
            g.FillRectangle(hb, this.ClientRectangle);
            hb.Dispose();

效果图:

创建影线笔刷时只能设置3个选项:前景色、背景色和影线样式。共有56中影线样式

Brush的5个实现类到这结束。

从笔刷中创建钢笔:使用笔刷类型的效果执行钢笔类型的操作。

下面是先创建了一个影线笔刷,然后从该笔刷中创建一个钢笔,笔宽度为8个像素,确保钢笔能绘制出影线笔刷的图案了。

Graphics g = e.Graphics;
            g.FillRectangle(Brushes.White, this.ClientRectangle);
            HatchBrush hb = new HatchBrush(
                HatchStyle.WideUpwardDiagonal,
                Color.White,
                Color.Black);
            Pen hp = new Pen(hb, 8);
            g.DrawRectangle(hp, 15, 15, 70, 70);
            hb.Dispose();
            hp.Dispose();
            g.Dispose();

效果图:

钢笔和笔刷就到这里。

    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值