本实例将使用Graphics类绘制五种图形来分别演示SolidBrush、HatchBrush、TextureBrush、LinearGradientBrush、PathGradientBrush这五种画笔的效果,然后将这五种图形输出的网页页面中。

程序实现的主要步骤为:

(1)新建一个网站并创建Default.aspx页面并打开Default.aspx.cs后台代码文件。

(2)在Default.aspx.cs代码的Page_Load中定义一个画布类,然后通过创建不同的实现类来实现不同的图形,代码如下:

  1. protectedvoid Page_Load(object sender, EventArgs e)
  2.  
  3. {
  4.  
  5. Bitmap bitmap = newBitmap(, );//建立位图文件
  6.  
  7. Graphics gra = Graphics.FromImage(bitmap);//设置画布,与bmap关联
  8.  
  9. gra.Clear(Color.White);//设置背景为白色
  10.  
  11. SolidBrush solidBrush = newSolidBrush(Color.Blue);//定义单色填充画笔
  12.  
  13. //使用单色填充画笔,填充矩形内部
  14.  
  15. gra.FillRectangle(solidBrush, newRectangle(, , , ));
  16.  
  17. //定义具有阴影样式、前景色以及背景色的画笔
  18.  
  19. HatchBrush hatchBrush =
  20.  
  21. newHatchBrush(HatchStyle.Horizontal, Color.Red, Color.FromArgb(, , ));
  22.  
  23. //使用阴影样式画笔,填充椭圆形内部
  24.  
  25. gra.FillEllipse(hatchBrush, newRectangle(, , , ));
  26.  
  27. //加载指定的图片
  28.  
  29. System.Drawing.Image image =
  30.  
  31. System.Drawing.Image.FromFile(Server.MapPath("image/Chrysanthemum.jpg"));
  32.  
  33. //通过指定的图像定义填充画笔
  34.  
  35. TextureBrush textureBrush = newTextureBrush(image);
  36.  
  37. //使用图像填充画笔,填充菱形内部
  38.  
  39. gra.FillPolygon(textureBrush, newPoint[] { newPoint(, ), newPoint(, ),
  40.  
  41. newPoint(, ), newPoint(, ) });
  42.  
  43. //定义线性渐变画笔,并制定了渐变区域以及渐变颜色
  44.  
  45. LinearGradientBrush linearGradientBrush = newLinearGradientBrush(newPoint(, ), newPoint(, ), Color.Red, Color.Yellow);
  46.  
  47. //使用线性渐变填充画笔,填充矩形内部
  48.  
  49. gra.FillRectangle(linearGradientBrush, newRectangle(, , , ));
  50.  
  51. GraphicsPath graphicsPath = newGraphicsPath();//定义相互连接的直线对象
  52.  
  53. graphicsPath.AddLine(, , , );//定义顶部水平直线
  54.  
  55. graphicsPath.AddLine(, , , );//定义右侧垂直直线
  56.  
  57. graphicsPath.AddLine(, , , );//定义底部水平直线
  58.  
  59. graphicsPath.CloseFigure();//关闭并使用直线连接结束点与开始点
  60.  
  61. //定义用于填充GraphicsPath对象内部的渐变画笔
  62.  
  63. PathGradientBrush pathGradientBrush = newPathGradientBrush(graphicsPath);
  64.  
  65. //设置路径渐变的中心处颜色
  66.  
  67. pathGradientBrush.CenterColor = Color.White;
  68.  
  69. //定义渐变颜色
  70.  
  71. pathGradientBrush.SurroundColors = newColor[] { Color.Green, Color.Blue };
  72.  
  73. //将带有渐变颜色的形状,填充到矩形内部
  74.  
  75. gra.FillRectangle(pathGradientBrush, newRectangle(, , , ));
  76.  
  77. Response.ContentType = "image/jpeg";//声明响应输出流为jpeg图片
  78.  
  79. bitmap.Save(Response.OutputStream, ImageFormat.Jpeg);//将位图输出到响应流
  80.  
  81. //释放各类使用的资源
  82.  
  83. bitmap.Dispose();
  84.  
  85. gra.Dispose();
  86.  
  87. solidBrush.Dispose();
  88.  
  89. hatchBrush.Dispose();
  90.  
  91. image.Dispose();
  92.  
  93. textureBrush.Dispose();
  94.  
  95. linearGradientBrush.Dispose();
  96.  
  97. graphicsPath.Dispose();
  98.  
  99. pathGradientBrush.Dispose();
  100.  
  101. }

(3)在使用TextureBrush类实现绘制图形时,用到了一张图片文件,所以接着在项目上创建一个image文件夹,然后复制一个jpg类型的图片文件并命名为Chrysanthemum.jpg。

执行程序,运行结果如图11.3所示。

图11.3 Brush对象五种图形的显示效果

实现Brush对象的五种图形的更多相关文章

  1. Java中创建(实例化)对象的五种方式

    Java中创建(实例化)对象的五种方式1.用new语句创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3.运用反 ...

  2. javaScript中定义类或对象的五种方式

    第一种方式: 工厂方法 能创建并返回特定类型的对象的工厂函数(factory function). function createCar(sColor){ var oTempCar = new Obj ...

  3. 反射----获取class对象的五种方法

    反射Reflection 配合注解使用会格外强大,反射注解,天生一对 类如何加载? 动态语言和静态语言.我知道是什么,不用总结了. 由于反射,Java可以称为准动态语言. 允许通过反射获得类的全部信息 ...

  4. java实例化对象的五种方法

    1.用new语句创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3.运用反射手段,调用java.lang.Cla ...

  5. TP6.0 获取请求对象的五种方式

    目录 1. 门面类 2. 依赖注入 3. 框架提供的基础控制器的 request 属性 4. request() 助手函数 5. app() 超级助手函数 think\Request.think\fa ...

  6. 【Java基础】Java创建对象的五种方式

    Java中创建(实例化)对象的五种方式 1.用new语句直接创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3. ...

  7. js对象之间的"继承"的五种方法

    今天要介绍的是,对象之间的"继承"的五种方法. 比如,现在有一个"动物"对象的构造函数. function Animal(){ this.species = & ...

  8. java:JavaScript2:(setTimeout定时器,history.go()前进/后退,navigator.userAgent判断浏览器,location.href,五种方法获取标签属性,setAttribute,innerHTML,三种方法获取form表单信息,JS表单验证,DOM对象,form表单操作)

    1.open,setTimeout,setInterval,clearInterval,clearTimeout <!DOCTYPE> <html> <head> ...

  9. NSNotification,NSNotificationCenter的使用、iOS中五种对象间传值的方式

    学习内容 NSNitification与NotificationCenter(通知与通知中心) 通知的使用 [[NSNotificationCenter defaultCenter]addObserv ...

随机推荐

  1. enote笔记语言(4)(ver0.4)——“5w1h2k”分析法

    章节:“5w1h2k”分析法   what:我想知道某个“关键词(keyword)”(即,词汇.词语,或称单词,可以是概念|专业术语|.......)的定义. why:我想分析and搞清楚弄明白“事物 ...

  2. 02. 爬取get请求的页面数据

    目录 02. 爬取get请求的页面数据 一.urllib库 二.由易到难的爬虫程序: 02. 爬取get请求的页面数据 一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用 ...

  3. NLTK学习笔记(七):文本信息提取

    目录 实体识别:分块技术 分块语法的构建 树状图 IOB标记 开发和评估分块器 命名实体识别和信息提取 如何构建一个系统,用于从非结构化的文本中提取结构化的信息和数据?哪些方法使用这类行为?哪些语料库 ...

  4. Django——8 关系表的数据操作 表关联对象的访问 多表查询

    Django 关系表中的数据操作 表关联对象的访问 关联对象的add方法 create方法 remove方法 clear方法 多表查询 查询补充 聚合查询 分组查询 F查询 Q查询 关系表的数据操作 ...

  5. BUPT2017 springtraining(15) #3

    这里这里 A.签到题 #include <cstdio> double a[] = {0.4, 0.16, 0.063, 0.025, 0.010, 0.004}; int main() ...

  6. Spring MVC-集成(Integration)-生成Excel示例(转载实践)

    以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_excel.htm 说明:示例基于Spring MVC 4.1.6. 以下示例显示 ...

  7. Android:开机自启动并接收推送消息

    接收推送消息部分我们通过ZeroMQ实现,可以参考http://www.cnblogs.com/ilovewindy/p/3984283.html. 首先是开机自启动的功能实现,代码如下:1.     ...

  8. [Angular] Why should we using Protal

    Origianl article Protal from Angular CDK, is a way to create dynammic component. Consider an example ...

  9. oracle级联操作

    在加入foreing key约束时,还能够指定级联操作的类型,主要用于确定当删除(on delete) 附表中的一条记录时,怎样处理子表中的外键字段,有例如以下三种引用类型. cascade 此key ...

  10. ubuntu中eclipse无法识别android手机问题

    1.问题: 在ubuntu中eclipse中用真机来调试androi程序时,发现无法识别手机,例如以下图显示2.37一栏之前显示全是乱码.这是解决后截的图. 2.问题原因: 在window下我们能够通 ...