创建Brush对象
在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对象的更多相关文章
- 实现Brush对象的五种图形
本实例将使用Graphics类绘制五种图形来分别演示SolidBrush.HatchBrush.TextureBrush.LinearGradientBrush.PathGradientBrush这五 ...
- 创建javaScript对象的方法
一.工厂模式 function person (name,age) { var p=new Object(); p.name=name; p.age=age; p.showMessage=functi ...
- .net下灰度模式图像在创建Graphics时出现:无法从带有索引像素格式的图像创建graphics对象 问题的解决方案。
在.net下,如果你加载了一副8位的灰度图像,然后想向其中绘制一些线条.或者填充一些矩形.椭圆等,都需要通过Grahpics.FromImage创建Grahphics对象,而此时会出现:无法从带有索引 ...
- win7 装了VB虚拟机 开始挺好用 后来突然就打不开了 提示如下错误:(如图)创建 COM 对象失败.
创建 COM 对象失败. 应用程序将被中断. Start tag expected, '<' not found. Location: 'C:\Users\Mike/.VirtualBox\Vi ...
- 在这个看脸的世界,该如何优雅的创建JS对象
Javascript是一门解释型的语言,是基于对象的,严格来说并不怎么符合的面向对象的标准,显著的特点就是函数就是“一等对象”,与传统的面向对象语言不同的时,Javascript有“一千种”方法来创建 ...
- java 创建string对象机制 字符串缓冲池 字符串拼接机制
对于创建String对象的机制,在这一过程中涉及的东西还是值得探究一番的. 首先看通过new String对象和直接赋值的方式有什么区别,看如下代码: public static void main( ...
- 创建XMLHttpRequest对象
创建XMLHttpRequest对象 XMLHttpRequest对象: 用于在后台与服务器交换数据,可以在不重新加载整个页面的情况下,对页面的部分内容进行更新. 创建XMLHttpRequest对象 ...
- 22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表。然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法showB输出大写的英文字母表。最后编写主类C,在主类的main方法 中测试类A与类B。
22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表.然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法sh ...
- 根据字符串生成类---类的类型.self---根据字符串创建控制器对象
swift和OC一样,都是通过NSClassFromString,根据一个字符串,生成相应的类. // UITabBarButton是系统的私有类,不能直接使用 // if btn.isKind(of ...
随机推荐
- Metasploit 读书笔记-持久控制
Meterpreter的persisitence脚本允许主任meterpreter代理,以确保系统重启之后Meterpreter还能运行。如果是反弹连接方式,可以设置连接攻击机的时间间隔。如果是绑定方 ...
- 787. Cheapest Flights Within K Stops
There are n cities connected by m flights. Each fight starts from city u and arrives at v with a pri ...
- 安卓手机牛逼软件Termux中安装Archlinux,安装Jdk
说出来你可能不信,手机上居然装了两个linux系统,和真实的linux有些许些差别. 首先安装了Termux以后你发现,好多linux常用功能都有,什么Pyhton,gcc,g++,ruby,Php, ...
- jq表单验证
<body> <form method="post" action=""> <div class="int"& ...
- Flink学习笔记-支持的数据类型
说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...
- P2105 K皇后
题意:$n*m$棋盘放置k个皇后,问几个格子不被攻击 1≤n,m≤20000,1≤k≤500 开set判重暴力$O(n*k)$然而,setMLE了QAQ 正解确实是$O(n*k)$的 以hang[i] ...
- Python之将字符串转换为字节的两种方法
s = '你是谁' a = bytes(s,'utf-8') # ==> 得出的 a 的结果就是对应的字节 s.encode('utf-8') # ==> 该命令将字符串转换为字节形式
- jvm与tomcat启动优化配置
JVM 优化 Java 的内存模型分为: Young,年轻代(易被 GC).Young 区被划分为三部分,Eden 区和两个大小严格相同的 Survivor 区,其中 Survivor 区间中,某一时 ...
- Oracle 11G R2在用EXP 导出时,空表不能导出解决办法
11G中有个新特性,当表无数据时,不分配segment,以节省空间 解决方法: 1.insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除,则产生segmen ...
- [Groovy]Parse properties file in Groovy
def props = new Properties() new File("foo.properties").withInputStream { s -> props.lo ...