C # – Sortie du stream de sortie de l’image en réponse donnant une erreur GDI +

Lors de la sortie d’une image dans le stream de sortie, nécessite-t-il un stockage temporaire? J’obtiens l’erreur “générique GDI +” généralement associée à une erreur de permission de dossier lors de l’enregistrement d’une image dans un fichier.

La seule chose que je fais à l’image est d’append du texte. Je reçois toujours l’erreur même lorsque je produis l’image sans modifications. Par exemple, cela va me donner l’erreur:

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

Tout fonctionne bien sur ma machine locale exécutant Windows 7 avec IIS 7.5 et ASP.NET 2.0. Le problème se produit sur le serveur QA qui exécute Windows Server 2003 avec IIS 6 et ASP.NET 2.0.

La ligne qui donne l’erreur est la suivante:

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

Voici la trace 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 

Les PNG (et autres formats) doivent être enregistrés dans un stream recherché. Utiliser un MemoryStream intermédiaire fera l’affaire:

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

Je voudrais juste append:

 Response.ContentType = "image/png"; 

Ainsi, il peut être visualisé directement dans le navigateur lorsqu’il ne se trouve pas dans une balise img .