创建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 ...
随机推荐
- Promise 异步函数顺序执行
可以满足需求,且使用方法和Promise.all统一 var a = function() { return new Promise(function(resolve, reject) { setTi ...
- mybatis、Spring整合(eclipse)以及事务管理
1.项目目录 2.jar包 dbcp:连接池 pool:连接池 logging:日志 log4j:日志 mybatis-spring:用于SqlSession等相关操作 spring相关包 mybat ...
- React-Native App启动页制作(安卓端)
原文地址:React-Native App启动页制作(安卓端) 这篇文章是根据开源项目react-native-splash-screen来写的.在使用react-native-link命令安装该包后 ...
- 33 个 2017 年必须了解的 iOS/swift 开源库第三方库
本文翻译自Medium,原作者为 Paweł Białecki<img src="https://pic3.zhimg.com/v2-c786777447261347b0d97 ...
- POJ1511 Invitation Cards SPFA算法裸题变形
原题目:http://poj.org/problem?id=1511 给出一个有向图,求出这个图从1到所有点的最短路径和所有点到1的最短路径的和. 这题数据量有点大,数据范围也大,所以用SPFA+邻接 ...
- redis之常用Set和ZSet命令
redis五种数据类型:String,Hash,List,Set,ZSet.五种数据类型各有优点,各司其职.最后两种数据类型Set和ZSet基本上是一种,ZSet就是给Set加了个排序而已(相当于加了 ...
- 在x64平台上调试依赖于x86的WCF服务
根据微软官方的解释,WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架.它使得开发者能够建立一个跨平台的安全.可信赖.事务性 ...
- Electron、Node.js、JavaScript、JQuery、Vue.js、Angular.js,layui,bootstrap
转载:https://blog.csdn.net/meplusplus/article/details/79033786 layui :是基于jquery库的封装开发. bootstrap:同样基于 ...
- java web关于文件上传下载的总结
文件上传使用<form method="POST" enctype="multipart/form-data"> , 而不是默认的applica ...
- my26_Slave failed to initialize relay log info structure from the repository
重启了一下从库,忘记先stop slave ,直接mysqladmin shutdown关闭实例,结果起不来了 mysql> start slave;ERROR 1872 (HY000): Sl ...