This function return an resized and centered image. I would like tu execute it like thumb.aspx?image=test.jpg&width=100&height=50&needToFill=true to get a ContentType = "image/jpeg"
But I get an error on return bmPhoto Page_Load(object, System.EventArgs) is null
Note
I knew that this code is wrong, but I would like to understand how to execute the same function in buffer.
<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="System.Drawing.Drawing2D" %>
<script language="C#" runat="server">
void Page_Load(Object sender, EventArgs e) {
    Response.Cache.VaryByParams["Image;Width;Height;needToFill"] = true;
    Response.ContentType = "image/jpeg";
    string imageLocation = Server.MapPath(Request.QueryString["Image"]);
    int Width = Convert.ToInt32(Request.QueryString["Width"]);
    int Height = Convert.ToInt32(Request.QueryString["Height"]);
    System.Drawing.Bitmap image = new System.Drawing.Bitmap(imageLocation);
    int sourceWidth = image.Width;
    int sourceHeight = image.Height;
    int sourceX = 0;
    int sourceY = 0;
    double destX = 0;
    double destY = 0;
    double nScale = 0;
    double nScaleW = 0;
    double nScaleH = 0;
    bool needToFill=true;
    nScaleW = ((double)Width / (double)sourceWidth);
    nScaleH = ((double)Height / (double)sourceHeight);
    if (Request.QueryString["needToFill"] != null) {
        needToFill = Convert.ToBoolean(Request.QueryString["needToFill"]);
    }
    if (!needToFill) {
        nScale = Math.Min(nScaleH, nScaleW);
    } else {
        nScale = Math.Max(nScaleH, nScaleW);
        destY = (Height - sourceHeight * nScale) / 2;
        destX = (Width - sourceWidth * nScale) / 2;
    }
    if (nScale > 1) nScale = 1;
    int destWidth = (int)Math.Round(sourceWidth * nScale);
    int destHeight = (int)Math.Round(sourceHeight * nScale);
    System.Drawing.Bitmap bmPhoto = null;
    try {
        bmPhoto = new System.Drawing.Bitmap(destWidth + (int)Math.Round(2 * destX), destHeight + (int)Math.Round(2 * destY));
    }
    catch (Exception ex) {
        throw new ApplicationException(string.Format("destWidth:{0}, destX:{1}, destHeight:{2}, desxtY:{3}, Width:{4}, Height:{5}",
            destWidth, destX, destHeight, destY, Width, Height), ex);
    }
    using (System.Drawing.Graphics grPhoto = System.Drawing.Graphics.FromImage(bmPhoto)) {
        grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic;
        grPhoto.CompositingQuality = CompositingQuality.HighQuality;
        grPhoto.SmoothingMode = SmoothingMode.HighQuality;
        Rectangle to =  new System.Drawing.Rectangle((int)Math.Round(destX), (int)Math.Round(destY), destWidth, destHeight);
        Rectangle from = new System.Drawing.Rectangle(sourceX, sourceY, sourceWidth, sourceHeight);
        grPhoto.DrawImage(image, to, from, System.Drawing.GraphicsUnit.Pixel);
        return bmPhoto;
    }
}
</script>