要在ASP.net里使用GDI+绘制图形,需要完成4个步骤。

(1) 创建一个内存里的位图,在其上将完成所有的绘图工作。

(2) 为图像创建一个GDI+图形上下文,将获得你需要的system.Drawing.Graphics 对象。

(3)使用Graphics对象的方法完成绘制图像。可以绘制和填充线条和形状,并且甚至可以从现有的文件中复制位图内容。

(4)使用Response.OutPutStream属性输出图像的二进制数据到浏览器。

下面将详细的说明这四个步骤。再此之前需要的命名空间是

using System.Drawing;

using System.Drawing.Drawing2D;

Using System.Drawing.Imaging;

第一步: 通过创建一个System.Drawing.Bitmap类的实例来创建一个内存里的位图。当创建这个对象时,需要将以像素为单位的图像的高度和宽度指定为构造函数的参数。这时候需要考虑的是图像的大小,不仅因为较大的位图在执行代码时需要消耗更多服务器的内存,而送到客户端的呈现大小也会增加,而且较大的位图会减缓传输速度。

      Bitmap image = new Bitmap(300,50);

第二步:为图像创建GDI+ 上下文对象。上下文是有System.Drawing。.Graphics对象表示。该对象提供方法来让你在内存里的位图绘制内容,要从一个现存的Bitmap对象创建一个Graphics对象。只需使用静态的方法Graphics.FromImage();

      Graphics g = Graphics.FromImage(image);

第三步:就是根据需要来绘制图像,使用graphics类的方法,可以绘制文本,形状和位图上的图像。例如,使用Graphics 对象的FillRectangule()方法用实的白色背景填充图像。

 //Draw a solid white rectangle start from point(1,1), make it 298 pixels wide and 48 pixels high
            g.FillRectangle(Brushes.White, 1, 1, 298, 48);

为了呈现文本,需要用到DrawString()

     Font font = new Font("Impact", 20, FontStyle.Regular);
            g.DrawString("This is first .NET GDI", font, Brushes.Blue, 10, 5);

第四步:一旦完成了所有的操作,就可以使用Image.Save()方法来将其发送到浏览器。从概念上讲,“保存”该图像到浏览器的响应流,然后它就被发送到客户端,并且显示在浏览器。(这里的Image.Save()方法可以将一个图像输出到任意有效流,包括FileStream,这个技巧可以能保存动态生成的图像到磁盘);

 //Render the image to the output stream
            image.Save(Response.OutputStream, ImageFormat.Gif);

当这四个步骤都完成后,应该要显示的释放图像和绘图上下文,因为两者都占用了一些非托管资源,需要立即释放,通过Dispose()方法来释放资源。

 g.Dispose();

   image.Dispose();