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
标签中时,可以直接在浏览器中查看。