2009-06-23 6 views
3

Je recadre une image et je souhaite la renvoyer à l'aide d'un gestionnaire ashx. Le code de la culture est la suivante:Renvoyer dynamiquement bitmap au navigateur

public static System.Drawing.Image Crop(string img, int width, int height, int x, int y) 
    { 
     try 
     { 
      System.Drawing.Image image = System.Drawing.Image.FromFile(img); 
      Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb); 
      bmp.SetResolution(image.HorizontalResolution, image.VerticalResolution); 

      Graphics gfx = Graphics.FromImage(bmp); 
      gfx.SmoothingMode = SmoothingMode.AntiAlias; 
      gfx.InterpolationMode = InterpolationMode.HighQualityBicubic; 
      gfx.PixelOffsetMode = PixelOffsetMode.HighQuality; 
      gfx.DrawImage(image, new Rectangle(0, 0, width, height), x, y, width, height, GraphicsUnit.Pixel); 
      // Dispose to free up resources 
      image.Dispose(); 
      bmp.Dispose(); 
      gfx.Dispose(); 

      return bmp; 
     } 
     catch (Exception ex) 
     { 
      return null; 
     } 
    } 

Le bitmap est retourné, et maintenant besoin d'envoyer ce retour au navigateur dans le flux de contexte, comme je ne veux pas un fichier physique créé.

Répondre

9

Vous avez vraiment juste besoin de l'envoyer sur la réponse avec un type MIME approprié:

using System.Drawing; 
using System.Drawing.Imaging; 

public class MyHandler : IHttpHandler { 

    public void ProcessRequest(HttpContext context) { 

    Image img = Crop(...); // this is your crop function 

    // set MIME type 
    context.Response.ContentType = "image/jpeg"; 

    // write to response stream 
    img.Save(context.Response.OutputStream, ImageFormat.Jpeg); 

    } 
} 

Vous pouvez modifier le format à un certain nombre de choses différentes; il suffit de vérifier l'enum.

1

Ecrivez le bitmap sur votre flux de réponse (et définissez le type MIME correct)

Peut-être une idée pour le convertir en png/jpg pour le réduire est SICE trop

2

Une meilleure approche consiste à utiliser écrire un gestionnaire pour accomplir la fonction. Here est un didacticiel qui renvoie l'image de la chaîne de requête et here est un article MSDN sur le sujet.