使用 Image.Save()方法将一个图像保存到一个响应流时,会覆盖所有 ASP.NET 要用到的控件。这有一个解决方案,可以使用 HTML 的 <img> 标签或者 Image Web 控件来链接到一个生成动态图像的 .aspx 文件。
创建 GDI+ 图像通常比提供一个静态图像慢一个数量级,因此,使用 GDI+ 多次重复绘制图形按钮或其他元素绝不是一个好主意。(如果真要这么做,要考虑缓存或者保存生成的图像文件以提高性能。)
使用 PNG 格式
PNG 是一种通用格式,这种格式将 GIF 的无损压缩和 JPEG 的丰富色彩结合起来以支持高质量图像。
动态生成的 PNG 图像有一个问题,即不能使用 BitMap.Save()方法。Response.OutputStream 是一个线性流,你只能从头到尾顺序写入数据。要创建一个 PNG 文件,.NET 需要能够在一个文件里来回前后的定位,需要一个可定位的流。
解决方案也很简单,可以创建一个 System.IO.MemoryStream 对象(内存里的一个缓冲区),将图像保存到这个对象后,就能很容易的从 MemoryStream 复制数据到 Response.OutputStream 了。
;
MemoryStream mem = new MemoryStream();
image.Save(mem,ImageFormat.Png);
mem.WriteTo(Response.OutputStream);
g.Dispose();
image.Dispose();