在GDI+中,可使用笔刷,以各种个颜色和图像填充图形,GDI+的Brush类本身是一个抽象的类,所以是不能实例化Brush的

但是GDI+的API提供五个类,就扩展了Brush类并提供了具体的实现方式

SolidBrush        使用纯颜色填充图形

TextureBrush       使用基于光栅的图像(位图,JPG等图像)填充图形

LinearGradientBrush    使用颜色渐变填充图形

PathGradientBrush     使用渐变色填充图形,渐变方向是从有路径定义的图像便捷指                                                      向 图形的中心

HatchBrush        使用各类图案填充图形

1.solidBrush实例

 private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
//定义红色笔刷 brush为抽象类所以不能实例化
Brush sh = new SolidBrush(Color.Red);
//填充椭圆
g.FillEllipse(sh,0,80,245,200);
}
//用户定义单色画笔,画笔用于填充图形形状,如矩形 椭圆,扇形,多边形和封闭路径

2.TextureBrush实例

 private void Form1_Paint(object sender, PaintEventArgs e)
{
Image a = Image.FromFile(@"d:\my documents\visual studio 2013\Projects\13.3Brush五大API\13.3Brush五大API\Image\2323.jpg");
Graphics g = e.Graphics;
Brush sh = new TextureBrush(a);
g.FillEllipse(sh,0,80,445,200);
//释放资源
g.Dispose();
}

3.LineargradientBrush

  使用颜色的线性渐变填充图形,如白色渐变到黑色。在使用此类前要先引入System.Drawing.Drawing2D命名空间

GDI+提供水平、垂直、和对角线方向线性渐变。在默认情况下,线性渐变中的颜色均匀地变化。当然,也可自定义线性渐变,使颜色非均匀变化。

private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
//定义渐变线行=2个点2个颜色
LinearGradientBrush gh = new LinearGradientBrush(new Point(0, 80), new Point(280, 120), Color.Red, Color.Green);
Brush sh = gh;
g.FillEllipse(sh,0,80,240,240);
       g.Dispose();
}

4.PathGradientBrush

  使用户可以自定义用渐变色填充形状的方式。在GDI+中,路径是由GraphicsPath对象维护的一系列线条和曲线。在使用此类前腰引入System.Drawing.Drawing2D命名空间。

 private void Form1_Paint(object sender, PaintEventArgs e)
{
//定义制图路径
GraphicsPath gp = new GraphicsPath();
//添加一个椭圆
gp.AddEllipse(0,80,280,120);
//路径刷
PathGradientBrush pgb = new PathGradientBrush(gp);
//设置渐变的中心颜色
pgb.CenterColor = Color.FromArgb(255,255,0,0);
//定义color数组来接收
Color[] ll = {Color.FromArgb(255,255,0,0) };
//填充中心点对应的数组
pgb.SurroundColors = ll;
//填充椭圆
e.Graphics.FillEllipse(pgb,0,80,280,120);
pgb.Dispose();
}

5.HatchBrush

  阴影图案由两种颜色组成:一种背景颜色,一种是在背景上形成图案的线条的颜色,若要用阴影图案填充闭合的形状,需使用HatchBrush类的对象。

在使用此类前要先引入System.Drawing.Drawing2D命名空间。

//定义阴影样式
HatchBrush hat = new HatchBrush(HatchStyle.Horizontal,Color.Yellow,Color.Red);
//定义画刷
Brush gr = hat;
//填充
e.Graphics.FillEllipse(gr,0,80,280,240);
//释放
e.Dispos();

  

  

创建Brush对象的更多相关文章

  1. 实现Brush对象的五种图形

    本实例将使用Graphics类绘制五种图形来分别演示SolidBrush.HatchBrush.TextureBrush.LinearGradientBrush.PathGradientBrush这五 ...

  2. 创建javaScript对象的方法

    一.工厂模式 function person (name,age) { var p=new Object(); p.name=name; p.age=age; p.showMessage=functi ...

  3. .net下灰度模式图像在创建Graphics时出现:无法从带有索引像素格式的图像创建graphics对象 问题的解决方案。

    在.net下,如果你加载了一副8位的灰度图像,然后想向其中绘制一些线条.或者填充一些矩形.椭圆等,都需要通过Grahpics.FromImage创建Grahphics对象,而此时会出现:无法从带有索引 ...

  4. win7 装了VB虚拟机 开始挺好用 后来突然就打不开了 提示如下错误:(如图)创建 COM 对象失败.

    创建 COM 对象失败. 应用程序将被中断. Start tag expected, '<' not found. Location: 'C:\Users\Mike/.VirtualBox\Vi ...

  5. 在这个看脸的世界,该如何优雅的创建JS对象

    Javascript是一门解释型的语言,是基于对象的,严格来说并不怎么符合的面向对象的标准,显著的特点就是函数就是“一等对象”,与传统的面向对象语言不同的时,Javascript有“一千种”方法来创建 ...

  6. java 创建string对象机制 字符串缓冲池 字符串拼接机制

    对于创建String对象的机制,在这一过程中涉及的东西还是值得探究一番的. 首先看通过new String对象和直接赋值的方式有什么区别,看如下代码: public static void main( ...

  7. 创建XMLHttpRequest对象

    创建XMLHttpRequest对象 XMLHttpRequest对象: 用于在后台与服务器交换数据,可以在不重新加载整个页面的情况下,对页面的部分内容进行更新. 创建XMLHttpRequest对象 ...

  8. 22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表。然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法showB输出大写的英文字母表。最后编写主类C,在主类的main方法 中测试类A与类B。

    22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表.然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法sh ...

  9. 根据字符串生成类---类的类型.self---根据字符串创建控制器对象

    swift和OC一样,都是通过NSClassFromString,根据一个字符串,生成相应的类. // UITabBarButton是系统的私有类,不能直接使用 // if btn.isKind(of ...

随机推荐

  1. iOS开发时间处理工具

    1.获取当前的时间 /** 获取当前的时间 */ +(NSString*)getCurrentTimes{ NSDateFormatter *formatter = [[NSDateFormatter ...

  2. Mybatis环境搭建中的案例分析 及 如果自己编写DAO接口的实现类

    Mybatis环境搭建中的案例分析public static void main (String[] args) throws Exception { //读配置文件 //第一个: 使用类加载器,只能 ...

  3. 模板 可并堆【洛谷P3377】 【模板】左偏树(可并堆)

    P3377 [模板]左偏树(可并堆) 如题,一开始有N个小根堆,每个堆包含且仅包含一个数.接下来需要支持两种操作: 操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或第y个数已经被删 ...

  4. 资深专家深度剖析Kubernetes API Server第2章(共3章)

    欢迎来到深入学习Kubernetes API Server的系列文章的第二部分.在上一部分中我们对APIserver总体,相关术语及request请求流进行探讨说明.在本部分文章中,我们主要聚焦于探究 ...

  5. CF959C Mahmoud and Ehab and the wrong algorithm 构造

    Mahmoud was trying to solve the vertex cover problem on trees. The problem statement is: Given an un ...

  6. python依赖文件的生成requirement.txt

    移到你的环境中 pip freeze > requirement.txt

  7. 04->python字典

    字典dict 1.数据类型分类(按可变和不可变)     不可变数据类型:数字.bool.str.tuple     可变数据类型:list.dict.set 2.dict的组成     key:va ...

  8. shell参数位置

    1给脚本文件传参 #!/bin/bash echo "a $1" echo "b $2" 执行传参: $ ../test.sh a b 输出结果: a a b ...

  9. DRF教程7-token认证

    Authentication 认证是将一个传入的请求和一组标识凭据相关联的机制,比如请求过来的用户,或者用户登录时携带的token. 然后权限策略就能使用这些凭据来决定是否允许这个请求. REST框架 ...

  10. Kibana 视图开发入门参考文档

    官方教程:https://www.elastic.co/blog/developing-new-kibana-visualizations GitHub源码:https://github.com/el ...