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.

Questions connexes