C # – Salida de la imagen a la secuencia de salida de respuesta dando error GDI +

Cuando se envía una imagen a la secuencia de salida, ¿requiere almacenamiento temporal? Aparece el error “GDI genérico +” que generalmente está asociado con el error de permiso de la carpeta al guardar una imagen en un archivo.

Lo único que le estoy haciendo a la imagen es agregar texto. Aún obtengo el error incluso cuando imprimo la imagen directamente sin modificaciones. Por ejemplo, hacer esto me dará el error:

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

Todo funciona bien en mi máquina local con Windows 7 con IIS 7.5 y ASP.NET 2.0. El problema está ocurriendo en el servidor QA que ejecuta Windows Server 2003 con IIS 6 y ASP.NET 2.0.

La línea que da el error es:

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

Aquí está el rastro de la stack:

 [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 

Los PNG (y otros formatos) deben guardarse en una secuencia buscable. Usar un MemoryStream intermedio hará el truco:

 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); } } 

Yo solo agregaría:

 Response.ContentType = "image/png"; 

Por lo tanto, se puede ver directamente en el navegador cuando no está dentro de una etiqueta img .