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

asp.net|动态|图形

在ASP.NET中动态生成图形

.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>标记,就是它来进行实际的图形生成工作。

时间: 2024-11-03 20:26:13

在ASP.NET中动态生成图形(转)的相关文章

asp.net中动态生成word文档,怎么给导出的word中标题栏的加个背景颜色。

问题描述 asp.net中动态生成word文档,怎么给导出的word中标题栏的加个背景颜色. asp.net中动态生成word文档,怎么给 导出 的word中标题栏的加个背景颜色.

如何在asp.net中动态生成验证码

asp.net|动态|验证码   现在越来越多的网站喜欢搞个验证码出来,而且各个语言基本上都能做到,今天我来一个C#写的! using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Drawing;using System.Web;using System.Web.SessionState;using System.Web.UI;using System.Web

asp.net怎么动态生成刻章

问题描述 asp.net怎么动态生成刻章 就是根据用户输入的内容生成刻章,难点不是在图片上加文字,而是文字沿着圆形曲线显示,多谢各位帮助.直接上图吧 解决方案 参考 Set Text on a Circle下载相应文件后,在页面中引用相关js文件(和jquery), 然后使用类似$(包含文字的html元素).lettering();就可以了. 解决方案二: 上面的答案有帮助吗?如果还有问题,请提出来,如果对答案满意,请顶一下,并标记为采纳答案,谢谢!

asp.net 后台动态生成input button 触发后台函数

问题描述 asp.net 后台动态生成input button 触发后台函数 在当前页面后台动态生成了个input button并且有个onserverclick="abc"但是调试点击之后没有反应源码: nr += ""; protected void tj_click(object sender, EventArgs e) { this.Literal2.Text = " alert('123');"; } 还有求怎么在tj_click中获取

在Table中动态生成的TextBox无法在PostBack时刷新数据

问题描述 问题如题,请高手帮忙看看问题在哪?1.不用Textbox时,在点击DropDownList时,页面PostBack后,Table是可以刷新数据的(代码如下)test.aspx:<%@PageLanguage="VB"AutoEventWireup="false"CodeFile="test.aspx.vb"Inherits="test"%><!DOCTYPEhtmlPUBLIC"-//W3

Panel中动态生成的控件怎么获取到?

问题描述 我在后台的panel中动态生成几个控件,然后在按钮点击方法中获取怎么获取不到啊?<asp:PanelID="mypanel"runat="server"></asp:Panel><asp:Buttonrunat="server"ID="mybutton"Text="mybutton"OnClick="mybutton_Click"/> pro

在ASP.NET中动态加载内容(用户控件和模板)

asp.net|动态|加载|控件|模板 在ASP.NET中动态加载内容(用户控件和模板)要点:1. 使用Page.ParseControl2. 使用base.LoadControl第一部分:加载模板 下面是一个模板"<table width=100%><tr><td width=100% colspan=2 runat=server id=ContainerTop></td></tr><tr><td width=30%

html 扇形统计图 js-html中动态生成一个扇形统计图

问题描述 html中动态生成一个扇形统计图 html中动态生成一个扇形统计图,怎么实现?(不是生成图片,因为扇形图上的每一块都有js效果) 解决方案 看看jqchart 解决方案二: 000000000000000000000 解决方案三: 饼图插件:CSDN移动问答

jquery中一个方法中动态生成的标签可以被其它方法调用吗

问题描述 jquery中一个方法中动态生成的标签可以被其它方法调用吗 解决方案 在控制台中动态引入jquery的方法jquery几个按钮同时调用一个方法 解决方案二: 可以,就根据div的id或者class找到他,$("#xxxx") 解决方案三: 你应该取得添加的那个JS对象 var dd = $('#attr_info').append(......) 然后再$(dd).eq(..).keyup 解决方案四: 看你代码append是动态添加的item吧..这样你的ajax都没添加到