C# – 输出图像到响应输出stream给GDI +错误

将图像输出到输出stream时,是否需要临时存储? 将图像保存到文件时,出现通常与文件夹权限错误相关的“通用GDI +”错误。

我正在做的唯一的事情是添加一些文字。 即使在不修改的情况下直接输出图像,仍然会出现错误。 例如,这样做会给我错误:

using (Bitmap image = new Bitmap(context.Server.MapPath("images/stars_5.png"))) { image.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Png); } 

一切工作正常我的本地机器运行与IIS 7.5和ASP.NET 2.0的Windows 7。 在运行带有IIS 6和ASP.NET 2.0的Windows Server 2003的QA服务器上发生此问题。

发生错误的行是:

 image.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Png); 

这是堆栈跟踪:

 [ExternalException (0x80004005): A generic error occurred in GDI+.] System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams) +378002 System.Drawing.Image.Save(Stream stream, ImageFormat format) +36 GetRating.ProcessRequest(HttpContext context) in d:\inetpub\wwwroot\SymInfoQA\Apps\tools\Rating\GetRating.ashx:54 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75 

PNG(和其他格式)需要保存到可search的stream中。 使用中间MemoryStream将做的伎俩:

 using (Bitmap image = new Bitmap(context.Server.MapPath("images/stars_5.png"))) { using(MemoryStream ms = new MemoryStream()) { image.Save(ms, System.Drawing.Imaging.ImageFormat.Png); ms.WriteTo(context.Response.OutputStream); } } 

我只是会补充说:

 Response.ContentType = "image/png"; 

所以当它不在img标签中时,可以直接在浏览器中查看。