在ASP.NET中动态生成图形

转载 2012年03月29日 17:37:39
.NET有一个很灵巧的特性,就是可以编写代码生成动态图形,然后将生成的图形保存在磁盘上或者直接将其发送到客户端的浏览器。

原理

用.NET生成图形的功能封装在System.Drawing名称空间中,它支持多种图形文件格式,包括:JPEG、GIF、PNG、TIFF、BMP、PhotoCD、FlashPIX、WMF、EMF和EXIF。

创建这些图形的通用机制是构造一个BitMap(位图)对象,它为要创建的图形提供了内存空间。然后,就可以调用它的“Save”方法,将其保存在磁盘,或者将其发送到任何.NET的输出流中。ASP.NET通过Response.OutputStream属性揭示.NET输出流,这意味着你可以直接将图形的内容发送到浏览器,而不用将其保存到磁盘中。

例如,在VB中,可以编写这样的代码:

' Create In-Memory BitMap of JPEG
Dim MyChartEngine as New ChartEngine
Dim StockBitMap as BitMap = MyChartEngine.DrawChart(600, 400, myChartData)
' Render BitMap Stream Back To Browser
StockBitMap.Save(Response.OutputStream, ImageFormat.JPEG)

如果用的是一个ASPX页面实现这个目的,就要同时设置适当的HTTP ContentType(内容类型)头文件,这样浏览器就不会将页面内容解释为html,而是解释为一个图形。可以通过代码设置Response.ContentType属性,或者是在顶层页面指令上设置新的“ContentType”属性来实现这一点:

<%@ Page Language="VB" ContentType="image/jpeg" %>

注意:ASP.NET的输出缓存功能对文本内容和二进制输出都奏效。这样,如果你正在从一个页面动态生成图形,就可以很容易地使用输出缓存指令,从而避免在各个请求上都重新生成图形。要注意图形的生成有可能是很麻烦的,因此我强烈推荐你使用这一功能。比如,可以用下面的指令每隔60秒对生成的图形进行输出缓存:

<%@ Page Language="VB" ContentType="image/jpeg" %>
<%@ OutputCache Duration="60" %>

生成股票图形例程

为了给你提供一个生成图形的完整举例,在这里包含了一个简单的股票图形生成样本代码。请注意其中股票的价格并不是真实的,只是我想象出来的。样本代码使用了一个定制的“ChartEngine”类,它可以将建立一个普通图形所要求的逻辑封装起来。你应该可以使用这个组件来制作任何定制图形,它并不是只局限于股票数据的。

在样本代码中,随便你想要使用哪些都可以,想要怎样使用都可以,也可以随便将其贴在文章的任何地方,以及其它样本中。

要想运行这个样本,将以下内容分别保存为文件放到IIS的一个应用程序Vroot下:请看源码。
然后,在命令行中键入以下语句:

mkdir bin
csc /t:library /out:bin\chartgen.dll ChartEngine.cs /r:System.Web.dll /r:System.Winforms.dll /r:System.Drawing.dll /r:System.dll

chartengine被编译后,点击StockPicker.aspx页面运行这个样本。这样,也就设置了一个指向ImageGenerator_VB.aspx 页面的<img>标记,就是它来进行实际的图形生成工作。

在ASP.NET中动态生成图形

.NET有一个很灵巧的特性,就是可以编写代码生成动态图形,然后将生成的图形保存在磁盘上或者直接将其发送到客户端的浏览器。 原理 用.NET生成图形的功能封装在System.Drawing名称空间...
  • chiefsailor
  • chiefsailor
  • 2007年06月08日 00:18
  • 522

在ASP.NET中动态生成图形(转)

StockPicker.aspx:   Sub ChartBtn_Click(Sender as Object, E as EventArgs)       chart.ImageUrl = "Ima...
  • zyizyizyi
  • zyizyizyi
  • 2005年04月25日 21:49
  • 595

在ASP.NET中动态生成图形(转)

  • zgqtxwd
  • zgqtxwd
  • 2008年05月01日 03:58
  • 83

asp.net在页面中动态生成表格

项目依然在调试,要总结的话总是感觉不太舒服,毕竟还没有完呢,所以现在想依次把这个系统中用到的一些比较麻烦的知识点记录到这,以便别人查阅(这可是偶千辛万苦从网上查资料整出来的哟。。。)首先在页面上定义一...
  • the_fire
  • the_fire
  • 2010年04月30日 09:12
  • 11844

asp.net 动态创建控件和移除控件

废话不多说 直接看一个小demo  前台代码 ...
  • u010586842
  • u010586842
  • 2013年11月17日 21:52
  • 2553

asp.net在表格中动态生成一个可以链接到另外一个页面的图片

1、在表格中动态生成一个可连接图片,点击图片可以跳转到另外一个页面:      将图片部分嵌入在a.text里面      TableCell tc = new TableCell();...
  • yueping2
  • yueping2
  • 2013年11月21日 21:26
  • 581

asp.net页面中动态地添加javascript脚本

最近的项目开发中 遇到一些需要根据具体情况动态添加javaScript脚本,然后执行脚本 于是收集了一下:1 在控件的绑定事件中添加脚本 如:在gridview控件的rowdatabind事件中可以实...
  • zhangyunhebei
  • zhangyunhebei
  • 2010年03月18日 14:18
  • 837

ASP.NET动态生成按钮和事件

ASP.NET动态生成TextBox并获取其值动态生成的文本框,生成的是HTML控件,所以获取文本框的值  控时,要注意获取的方法,不同时间获取的方法不同.(页面一架载完时的值 和 控件的原有值改变时...
  • qinleiji
  • qinleiji
  • 2011年04月21日 17:26
  • 4863

动态生成TextBox总结

   我们可以在PageLoad事件中做一个试验,80%的程序员会第一反映到:textbox tb;tb = new textbox();this.Controns.add(控件的ID);上面的一种方...
  • zhuiyang1986
  • zhuiyang1986
  • 2007年06月11日 14:08
  • 4019

ASP.NET 后台动态添加控件checkbox

      C#WEB开发中,在后台为前台页面根据需要去添加控件是很常见的操作。以添加checkbox 为例来分析这个操作的步骤。  首先前台页面中要有存放后台添加的控件,一般会用这个标签(Lable...
  • rxopt
  • rxopt
  • 2009年02月11日 10:22
  • 8414
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在ASP.NET中动态生成图形
举报原因:
原因补充:

(最多只允许输入30个字)