public class MonthlyReportHanlder : IHttpHandler
{
#region IHttpHandler Members
public bool IsReusable
{
get { return false; }
}
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "image/jpeg";
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.BufferOutput = false;
string year = context.Request["Year"];
string kpi1 = context.Request["kpi1"];
string kpi2 = context.Request["kpi2"];
var entities = new YearReport().GetData(year);
var image = this.GenerateImage(entities, kpi1, kpi2);
image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
image.Dispose();
}
#endregion
private Image GenerateImage(IList<YearEntity> entities, string kpi1, string kpi2)
{
Image image = new Bitmap(w, h, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(image);
g.SmoothingMode = SmoothingMode.AntiAlias;
Rectangle rect = new Rectangle(0, 0, image.Width, image.Height);
g.FillRectangle(b, rect);
g.DrawRectangle(p, new Rectangle(0, 0, rect.Width - 1, rect.Height - 1));
g.Dispose();
return image;
}
}
这是我在ASP.NET项目中动态生成图片的代码,为了看清结构,我把一些无关的代码删除了,你将就着参考下吧
没太大差别,都是操作Graphics,唯一的区别就是输出显示的方式不一样,Winform里面可以直接显示到窗体上,而asp.net里就需要把图片通过http请求输出才行,就这点比较麻烦
你可以去搜到一些asp.net生成验证码的文章,里面有输出Bitmap的代码,还有部分GDI+的代码
如果你单纯想学GDI+的话,建议你直接用winform还方便点,asp.net里面输出Bitmap的代码是一样的,你可以在winform里测试好后直接迁移到asp.net里,只需要改下输出Bitmap的方式就可以了
我的博客已有一片自己画的验证码,你可以看一下,看看对你有用吗?