Return Bitmap to Browser dynamically

ashx, asp.net, c#, image-manipulation

Solution

You really just need to send it over the response with an appropriate MIME type:

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

  }
}

You can change the format to a number of different things; just check the enum.

Problem

I am cropping an image, and wish to return it using a ashx handler. The crop code is as follows: ``` 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; } } ``` The bitmap is being returned, and now need to send that back to the browser through the context stream, as I do not want a physical file created.

Original source