实现Brush对象的五种图形
本实例将使用Graphics类绘制五种图形来分别演示SolidBrush、HatchBrush、TextureBrush、LinearGradientBrush、PathGradientBrush这五种画笔的效果,然后将这五种图形输出的网页页面中。
程序实现的主要步骤为:
(1)新建一个网站并创建Default.aspx页面并打开Default.aspx.cs后台代码文件。
(2)在Default.aspx.cs代码的Page_Load中定义一个画布类,然后通过创建不同的实现类来实现不同的图形,代码如下:
protectedvoid Page_Load(object sender, EventArgs e)
{
Bitmap bitmap = newBitmap(, );//建立位图文件
Graphics gra = Graphics.FromImage(bitmap);//设置画布,与bmap关联
gra.Clear(Color.White);//设置背景为白色
SolidBrush solidBrush = newSolidBrush(Color.Blue);//定义单色填充画笔
//使用单色填充画笔,填充矩形内部
gra.FillRectangle(solidBrush, newRectangle(, , , ));
//定义具有阴影样式、前景色以及背景色的画笔
HatchBrush hatchBrush =
newHatchBrush(HatchStyle.Horizontal, Color.Red, Color.FromArgb(, , ));
//使用阴影样式画笔,填充椭圆形内部
gra.FillEllipse(hatchBrush, newRectangle(, , , ));
//加载指定的图片
System.Drawing.Image image =
System.Drawing.Image.FromFile(Server.MapPath("image/Chrysanthemum.jpg"));
//通过指定的图像定义填充画笔
TextureBrush textureBrush = newTextureBrush(image);
//使用图像填充画笔,填充菱形内部
gra.FillPolygon(textureBrush, newPoint[] { newPoint(, ), newPoint(, ),
newPoint(, ), newPoint(, ) });
//定义线性渐变画笔,并制定了渐变区域以及渐变颜色
LinearGradientBrush linearGradientBrush = newLinearGradientBrush(newPoint(, ), newPoint(, ), Color.Red, Color.Yellow);
//使用线性渐变填充画笔,填充矩形内部
gra.FillRectangle(linearGradientBrush, newRectangle(, , , ));
GraphicsPath graphicsPath = newGraphicsPath();//定义相互连接的直线对象
graphicsPath.AddLine(, , , );//定义顶部水平直线
graphicsPath.AddLine(, , , );//定义右侧垂直直线
graphicsPath.AddLine(, , , );//定义底部水平直线
graphicsPath.CloseFigure();//关闭并使用直线连接结束点与开始点
//定义用于填充GraphicsPath对象内部的渐变画笔
PathGradientBrush pathGradientBrush = newPathGradientBrush(graphicsPath);
//设置路径渐变的中心处颜色
pathGradientBrush.CenterColor = Color.White;
//定义渐变颜色
pathGradientBrush.SurroundColors = newColor[] { Color.Green, Color.Blue };
//将带有渐变颜色的形状,填充到矩形内部
gra.FillRectangle(pathGradientBrush, newRectangle(, , , ));
Response.ContentType = "image/jpeg";//声明响应输出流为jpeg图片
bitmap.Save(Response.OutputStream, ImageFormat.Jpeg);//将位图输出到响应流
//释放各类使用的资源
bitmap.Dispose();
gra.Dispose();
solidBrush.Dispose();
hatchBrush.Dispose();
image.Dispose();
textureBrush.Dispose();
linearGradientBrush.Dispose();
graphicsPath.Dispose();
pathGradientBrush.Dispose();
}
(3)在使用TextureBrush类实现绘制图形时,用到了一张图片文件,所以接着在项目上创建一个image文件夹,然后复制一个jpg类型的图片文件并命名为Chrysanthemum.jpg。
执行程序,运行结果如图11.3所示。

图11.3 Brush对象五种图形的显示效果
实现Brush对象的五种图形的更多相关文章
- Java中创建(实例化)对象的五种方式
Java中创建(实例化)对象的五种方式1.用new语句创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3.运用反 ...
- javaScript中定义类或对象的五种方式
第一种方式: 工厂方法 能创建并返回特定类型的对象的工厂函数(factory function). function createCar(sColor){ var oTempCar = new Obj ...
- 反射----获取class对象的五种方法
反射Reflection 配合注解使用会格外强大,反射注解,天生一对 类如何加载? 动态语言和静态语言.我知道是什么,不用总结了. 由于反射,Java可以称为准动态语言. 允许通过反射获得类的全部信息 ...
- java实例化对象的五种方法
1.用new语句创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3.运用反射手段,调用java.lang.Cla ...
- TP6.0 获取请求对象的五种方式
目录 1. 门面类 2. 依赖注入 3. 框架提供的基础控制器的 request 属性 4. request() 助手函数 5. app() 超级助手函数 think\Request.think\fa ...
- 【Java基础】Java创建对象的五种方式
Java中创建(实例化)对象的五种方式 1.用new语句直接创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3. ...
- js对象之间的"继承"的五种方法
今天要介绍的是,对象之间的"继承"的五种方法. 比如,现在有一个"动物"对象的构造函数. function Animal(){ this.species = & ...
- java:JavaScript2:(setTimeout定时器,history.go()前进/后退,navigator.userAgent判断浏览器,location.href,五种方法获取标签属性,setAttribute,innerHTML,三种方法获取form表单信息,JS表单验证,DOM对象,form表单操作)
1.open,setTimeout,setInterval,clearInterval,clearTimeout <!DOCTYPE> <html> <head> ...
- NSNotification,NSNotificationCenter的使用、iOS中五种对象间传值的方式
学习内容 NSNitification与NotificationCenter(通知与通知中心) 通知的使用 [[NSNotificationCenter defaultCenter]addObserv ...
随机推荐
- 计蒜客 劫富济贫 (Trie树)
链接 : Here! 思路 : Trie树裸题, 由开始给出的名字建一棵字典树, 然后每次查询一下抢♂劫的人名是否在字典树中, 复杂度也不清楚是多少, 反正是没给出 $M$ 的范围, 开始时用 $ha ...
- CF17E Palisection (回文自动机+DP)
题目传送门 题目大意:给你一个字符串,让你求出有多少对相交的回文子串 啊啊啊啊降智了,我怎么又忘了正难则反! 求相交会很难搞.把问题转化成求互不相交的回文子串再减一下就行了 先利用$PAM$求出以每个 ...
- python 函数编写指南
#函数编写指南:1.给函数指定描述性名称,且只在其中是用小写字母和下划线 2.每个函数都应包含简要的阐述其功能的注释,该注释应紧跟在函数定义后面,且采用文档字符串格式 3.给形参指定默认值时,等号两边 ...
- Huawei-R&S-网络工程师实验笔记20190609-VLAN划分综合(Access和Trunk端口)
>Huawei-R&S-网络工程师实验笔记20190609-VLAN划分综合(Access和Trunk端口) >>实验开始,先上拓扑图参考: >>>实验目标 ...
- [TS-A1488][2013中国国家集训队第二次作业]魔法波[高斯消元]
暴力直接解异或方程组,O(n^6)无法接受,那么我们考虑把格子分块,横着和竖着分别分为互不影响的块,这样因为障碍物最多不超过200个,那么块的个数最多为2*(800+200)=2000个,最后用bit ...
- html简单实现下拉菜单
主要用到的知识ul和li标签 ul li 是一个组合:是无序列表标签,在实际中用的非常多,与之对应的是有序列表:ol lili是不能单独使用,必须在于ul之中的ul是块级元素,能直接定义宽高,而li是 ...
- ZooKeeper官方文档资源
一般来说官方的文档是最权威的. 入口:http://zookeeper.apache.org/ 在右侧即可进入相应版本文档: 如果想要看主干的文章,入口如下,主干是最稳当的版本:http://zook ...
- Myeclipse10完美破解过程
Myeclipse10完美破解过程 1.假设还没有破解文件的话,能够先到这里去下载破解件 http://download.csdn.net/download/wangcunhuazi/7874155 ...
- 最小生成树模板(poj3625)
Building Roads Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9360 Accepted: 2690 De ...
- 瀑布流 ajax 预载入 json
pbl.json[模拟后台json数据]: [ { "id": "511895", "title": ...