实现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 ...
随机推荐
- Oracle存储过程及函数的练习题
--存储过程.函数练习题 --(1)创建一个存储过程,以员工号为参数,输出该员工的工资create or replace procedure p_sxt1(v_empno in emp.empno%t ...
- Charles 下载-破解-安装-配置
我当前使用版本为V4.2.7 最新版本下载地址 Charles 在线破解工具 下载完之后,先进行安装,安装完之后,根据破解链接中的步骤来就ok了. 比较费劲配置在下面,不过跟着一步步来就一定能好的 点 ...
- Linux - VMware和Centos安装
目录 Linux - VMware和Centos安装 选择性 下载centos系统ISO镜像 安装虚拟机VMware虚拟机 1. 准备vmware软件 2. 解压软件包, 当前选择vm12 3. vm ...
- BZOJ 2038 2009国家集训队 小Z的袜子【模板·莫队】
[题解] 1,先说说莫队算法. 莫队算法是用来离线处理区间问题的算法.非常易于理解和使用,且运用十分广泛. 假设我们现在已知区间[L,R]的答案,如果我们能以较低的时间复杂度扩展得到区间$[L-1,R ...
- PAT 1057. Stack
Stack is one of the most fundamental data structures, which is based on the principle of Last In Fir ...
- [数据结构]C#顺序表的实现
在数据结构的学习当中,想必C++可能是大家接触最多的入门语言了 但是C#的数据结构却很少看到,今天我写了一个C#顺序表的顺序存储结构 顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是 ...
- Django——2 路由分配设置 re_path正则匹配 include总路由 url传参 name使用 模板渲染render方法 模板渲染方法
Django 路由分配设置 re_path正则匹配 include总路由设置 url额外参数的传递 name的使用 模板的渲染:render方法 路由的分配中, 可以设定相应的转换器加以约束,比如 ...
- Pillow 模块~Python图像处理
什么是验证码? 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自 ...
- 如何在Tomcat (6/7/8.0) 安装SSL证书
第一步:进入Tomcat安装目录,把证书的jks格式文件放在tomcat安装目录的conf目录下即可. conf/ssl/371cloud.cn.jks 第二步: 打开tomcat配置文件 conf/ ...
- Package pdftex.def Error: PDF mode expected, but DVI mode detected!
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51646781 在如下使用LaTeX编译 ...