<%@ WebHandler Language="C#" Class="ImageHandler" %>
using System;
using System.Web;
public class ImageHandler : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{
public void ProcessRequest (HttpContext context) {
string picId = context.Request.QueryString["ID"];
if (context != null)
{
if (context.Session != null)
{
if (context.Session[picId] != null)
{
byte[] data = (byte[])context.Session[picId];
context.Response.ContentType = "image/jpeg";
context.Response.BinaryWrite(data);
}
}
}
}
public bool IsReusable {
get {
return false;
}
}
}
这个HttpHandler因为需要用到Session中的数据 ,所以必须用IRequiresSessionState,否则Session中内容不可取。
现在只要让我们生成的图片的字节流Byte[ ] 放入Session中就OK了
这时需要将Image转换为Byte[ ]
/// <summary>
/// 将Image转换为byte[]
/// </summary>
/// <param name="image">Image</param>
/// <returns>byte[]</returns>
public byte[] ConvertImage(Image image)
{
using (MemoryStream ms = new MemoryStream())
{
image.Save(ms, ImageFormat.Bmp);
return ms.ToArray();
}
}
上述只是一种转换方法 ,其他方法也可行。最好写个类把写转换的方法都写在里面
最后就是生成图片。
protected void btnGetPic_Click(object sender, EventArgs e)
{
DImage img=GetImage();
byte[] imgData = ConvertImage(img);
string picId = DateTime.Now.ToString("yyyyMMddHHmmss");
Session[picId] = imgData;
imgShow.Visible = true;
imgShow.ImageUrl = "ImageHandler.ashx?ID=" + picId;
}
这里需要using DImage = System.Drawing.Image;因为WebControls里面也有个Image的控件
至于GetImage()方法就是用Graphics画图。不用详细写了
这些内容最好写到某个控件中。