以下是原文:
Code:
復制代碼 代碼如下:
Response.Clear();
Response.ContentType = "image/PNG";
img.Save(Response.OutputStream, ChartFormat.Png);
竟然出現異常,是GDI+一般性錯誤。但是如果格式是
Code:
復制代碼 代碼如下:
Response.ContentType = "image/jpeg";
就不會報錯。
好在以前遇到過,改成
Code:
復制代碼 代碼如下:
Response.ContentType = "image/PNG";
using (MemoryStream ms = new MemoryStream())
{
img.Save(ms, ChartFormat.Png);
Response.OutputStream.Write(ms.GetBuffer(), 0, (int)ms.Length);
}
就可以輸入png圖片了。
這是由於Response.OutputStream這個流的無法往回讀取造成的,也就是它的CanSeek屬性
是false。png圖像生成的時候不像jpeg,不是流式的,已經寫入的就不再管了,而是需要往回
不斷地寫入結構數據。但是response流無法往回seek,所以直接用就不行了。改成一個可以
seek的MemoryStream,先生成好png圖片,然後再輸出到response流。