实现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 ...
随机推荐
- enote笔记语言(4)(ver0.4)——“5w1h2k”分析法
章节:“5w1h2k”分析法 what:我想知道某个“关键词(keyword)”(即,词汇.词语,或称单词,可以是概念|专业术语|.......)的定义. why:我想分析and搞清楚弄明白“事物 ...
- 02. 爬取get请求的页面数据
目录 02. 爬取get请求的页面数据 一.urllib库 二.由易到难的爬虫程序: 02. 爬取get请求的页面数据 一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用 ...
- NLTK学习笔记(七):文本信息提取
目录 实体识别:分块技术 分块语法的构建 树状图 IOB标记 开发和评估分块器 命名实体识别和信息提取 如何构建一个系统,用于从非结构化的文本中提取结构化的信息和数据?哪些方法使用这类行为?哪些语料库 ...
- Django——8 关系表的数据操作 表关联对象的访问 多表查询
Django 关系表中的数据操作 表关联对象的访问 关联对象的add方法 create方法 remove方法 clear方法 多表查询 查询补充 聚合查询 分组查询 F查询 Q查询 关系表的数据操作 ...
- BUPT2017 springtraining(15) #3
这里这里 A.签到题 #include <cstdio> double a[] = {0.4, 0.16, 0.063, 0.025, 0.010, 0.004}; int main() ...
- Spring MVC-集成(Integration)-生成Excel示例(转载实践)
以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_excel.htm 说明:示例基于Spring MVC 4.1.6. 以下示例显示 ...
- Android:开机自启动并接收推送消息
接收推送消息部分我们通过ZeroMQ实现,可以参考http://www.cnblogs.com/ilovewindy/p/3984283.html. 首先是开机自启动的功能实现,代码如下:1. ...
- [Angular] Why should we using Protal
Origianl article Protal from Angular CDK, is a way to create dynammic component. Consider an example ...
- oracle级联操作
在加入foreing key约束时,还能够指定级联操作的类型,主要用于确定当删除(on delete) 附表中的一条记录时,怎样处理子表中的外键字段,有例如以下三种引用类型. cascade 此key ...
- ubuntu中eclipse无法识别android手机问题
1.问题: 在ubuntu中eclipse中用真机来调试androi程序时,发现无法识别手机,例如以下图显示2.37一栏之前显示全是乱码.这是解决后截的图. 2.问题原因: 在window下我们能够通 ...