快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

ASP.NET编程实例ABC(2)

    
  
  
  在ASP.NET中随意创建图形信息
  假如没有一个外部组件的支持,在ASP中是不能动态创建图形的,不管它是一个图表,一个横幅或仅仅是一个图形计数器。可喜的是,这一点在ASP.NET中改变了。现在,我们只需要使用内置功能,就能够很轻易动态创建图形,并向客户端发送具有最佳配置的图形。
  用命令行程序创建图形
  在讨论一大堆ASP.NET代码之前,我们先执行一个简朴的命令行程序做一个测试,然后使用这些源代码作为 ASP.NET 脚本的基础。实际上,两者的区别在于:命令行程序将图形保存在一个文件中,而ASP.NET 脚本将图形直接发送到客户端。
  举例的程序做什么呢?按照惯例,我们从众所周知的"Hello World" 程序开始,把这个文本信息输出到一个图形文件中,这个图形的大小要与当前选中的 "Hello World" 文本的字体和字号完全一样。
  下面的脚本pagecounter.cs是一个典型的简朴命令行程序:假如忽略包围在其四周的必须的类代码,就只剩下程序运行时要调用的主函数了,这也正是生成图形的代码所在处:
  using System;
  using System.IO;
  using System.Drawing;
  using System.Drawing.Imaging;
   
  public class CTestBitmapFunctionality
  {
  public static void Main()
  {
  Bitmap newBitmap = null;
  Graphics g = null ;
   
  try
  {
  Font fontCounter = new Font("Lucida Sans Unicode", 12);
   
  // calculate size of the string.
  newBitmap = new Bitmap(1,1,PixelFormat.Format32bppARGB);
  g = Graphics.FromImage(newBitmap);
  SizeF stringSize = g.MeasureString("Hello World", fontCounter);
  int nWidth = (int)stringSize.Width;
  int nHeight = (int)stringSize.Height;
  g.Dispose();
  newBitmap.Dispose();
   
  newBitmap = new Bitmap(nWidth,nHeight,PixelFormat.Format32bppARGB);
  g = Graphics.FromImage(newBitmap);
  g.FillRectangle(new SolidBrush(Color.White),
  new Rectangle(0,0,nWidth,nHeight));
   
  g.DrawString("Hello World", fontCounter,
  new SolidBrush(Color.Black), 0, 0);
   
  newBitmap.Save("c:\\test.png", ImageFormat.PNG);
  }
  catch (Exception e)
  {
  Console.WriteLine(e.ToString());
  }
  finally
  {
  if (null != g) g.Dispose();
  if (null != newBitmap) newBitmap.Dispose();
  }
  }
  }
  在任何情况下,执行上面代码后,就会生成下面的图形test.png,它将存放在C驱动器上:
  
  我们来仔细研究一下源代码,看看这个图形是如何创建的。要害一点是生成的图形必须与文本 "Hello World" 的字体和字号一样。因此,首先要计算文本的尺寸,为此我们使用了一个尺寸为1 x 1的虚拟图形。计算结束之后,再废弃这个虚拟图形并生成一个适当尺寸的图形。
  源代码中有一点很有趣,这就是 Graphics 对象。要创建一个位图时,用这个对象做什么呢?奥妙在于:这是可以向其中绘图的上下文环境。我们可以在屏幕上、打印机上和内存中使用一个图形上下文环境,正确地说就是一个位图。图形的上下文环境使我们能够在任何设备上进行绘图操作,甚至是在虚拟设备上。
  接着,用DrawString将文本 "Hello World"按照规格输出到一个白色背景的矩形(用 FillRectangle创建的)中。图形完成后,将其保存在磁盘上。凡是亲自研究过图形文件格式的人都知道这有多困难,但是使用 GDI+ (图形设备接口)就不那么困难了,这只需要下面的简朴命令就可以:
  newBitmap.Save("c:\\test.png", ImageFormat.PNG);
  假如用ImageFormat.JPEG替换ImageFormat.PNG,就可以得到一个 jpeg文件。这正是我们所期待的操作图形的最简朴用法。
  例外处理代码也很有必要,因为有些函数会造成例外,比如没有足够的内存用来创建位图。而且,不要忘记释放图形和位图,这是编程的良好习惯,有始有终吗!最后,程序结束。
  好了,现在请使用下面的命令将源代码进行编译,生成EXE文件pagecounter.exe,然后在安装了Microsoft .NET框架的系统上测试运行:
  csc /R:System.DLL /R:System.Drawing.DLL pagecounter.cs
  在Web服务器上创建ASP.NET程序
  上面的代码作为一个命令行应用程序已经足够了,但是要编写相应的 ASP.NET 脚本,就必须再添加几个功能:
  ●可选择的文本(如一个计数器)
  ●可选择的文本颜色
  ●可选择的背景颜色
  ●可选择的字体
  ●可选择的字号
  假如你认为这些太难做到了,那么就请先看看相关的ASP.NET 脚本源代码pagecounter.aspx。要提醒的是:增加任意数量的错误处理代码以查看所传递参数的有效性,这是所必须做的修改中最大的一部分。
  另一个需要修改的地方是将图形发送给客户端而不是将它写入一个文件中。这个新部分的代码是这样的:
  MemoryStream tempStream = new MemoryStream();
  newBitmap.Save(tempStream,ImageFormat.PNG);
   
  Response.ClearContent();
  Response.ContentType = "image/png";
  Response.BinaryWrite(tempStream.ToArray());
  Response.End();
  这里只是将图形"缓存"到内存中,然后将其作为一个字节数组传递给BinaryWrite函数。
  仔细研究了源代码的人会注重到这里将所有可选择参数都作为查询字符串进行了传递,这可能会成为一个很长的尾巴。为了简洁起见,我们建立了一个如下所示的表单,这样就可以测试不同的值:
  
  
  ASP.NET文件pagecountertest.aspx处理比较好的一点是我们可以在同一页面上马上接收到图形。表单源代码包含了服务器端的ASP.NET控件。
  小 结
  以上我们迅速涵盖了ASP.NET中的图形编程功能,了解到ASP.NET为Web开发人员实现Windows图形编程提供了全套指导。
  


返回类别: 教程
上一教程: .Net边学边讲(一)
下一教程: ASP+与JSP之间的抉择

您可以阅读与"ASP.NET编程实例ABC(2)"相关的教程:
· 用ASP编程实现迅速查找
· ASP.NET高级教程(2.2):转变编程思维
· 用ASP编程实现网络内容迅速查找
· 实例演练ASP+XML编程(1)
· 实例学习DREAMWEAVER MX ASP编程基础2
    微笑服务 优质保证 索取样品