You could use a control that inherits from IHttpHandler like this:
<%@ WebHandler Language="C#"
Class="AspNet.StarterKits.Classifieds.Web.PhotoDisplay" %>
using System;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Web;
using AspNet.StarterKits.Classifieds.BusinessLogicLayer;
namespace Mynamespace
{
public class PhotoDisplay : IHttpHandler
{
public const string QueryStringFullSize = "full";
public const string QueryStringMediumLarge = "large";
public const string QueryStringMediumSize = "medium";
public const string QueryStringMediumSmall = "small";
public void ProcessRequest(HttpContext context)
{
HttpResponse Response = context.Response;
HttpRequest Request = context.Request;
Image myThumbnail = new Bitmap(1,1);
//string url2 = Path.Combine(@"c:\attachments", "110.jpg");
if (Request.QueryString["photoid"] != null)
{
// Retrieve the path to the file.
string url2 =
GetPicturePath(Request.QueryString["photoid"],context);
if (url2.Length > 0)
{
Image.GetThumbnailImageAbort myCallback = new
Image.GetThumbnailImageAbort(ThumbnailCallback);
Image fullImg = Image.FromFile(url2);
if (Request.QueryString["size"] ==
QueryStringMediumSmall)
myThumbnail = fullImg.GetThumbnailImage(100, 100,
myCallback, IntPtr.Zero);
if (Request.QueryString["size"] == QueryStringMediumSize)
myThumbnail = fullImg.GetThumbnailImage(200, 200,
myCallback, IntPtr.Zero);
if (Request.QueryString["size"] == QueryStringMediumLarge)
myThumbnail = fullImg.GetThumbnailImage(300, 300,
myCallback, IntPtr.Zero);
if (Request.QueryString["size"] == QueryStringFullSize)
myThumbnail = fullImg;
// make a memory stream to work with the image bytes
MemoryStream imageStream = new MemoryStream();
// put the image into the memory stream
myThumbnail.Save(imageStream, ImageFormat.Jpeg);
// make byte array the same size as the image
byte[] imageContent = new Byte[imageStream.Length];
// rewind the memory stream
imageStream.Position = 0;
// load the byte array with the image
imageStream.Read(imageContent, 0,
(int)imageStream.Length);
//byte[] allBytes = File.ReadAllBytes(url2);
Response.ContentType = "image/jpeg";
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.BufferOutput = false;
Response.OutputStream.Write(imageContent, 0,
imageContent.Length);
}
}
//e.Graphics.DrawImage(myThumbnail, 150, 75);
}
public bool ThumbnailCallback()
{
return false;
}
public bool IsReusable
{
get
{
return true;
}
}
}
}
Then call the control like this:
<img id="ss_img" src="PhotoDisplay.ashx?photoid=KeyForImage&size=large"
alt="My Image" width="230" />
Just for the photoid be sure and pass something in that indicates what photo
you want. If you are generating the image at runtime - perhaps you can use
more than one parameter that can indicate Width, Height, content, etc...
-Brian
> Hi Everyone,
>
[quoted text clipped - 20 lines]
> Thanks,
> computer_guy
FYI - the class file should have an ".ashx" extension.
> Hi Everyone,
>
[quoted text clipped - 20 lines]
> Thanks,
> computer_guy
computer_guy - 20 Jul 2007 05:25 GMT
Thanks a lot for your help.
The problem is that the url is too short to specify all the
parameters. It is more like the following:
<img id="ss_img" src="PhotoDisplay.ashx?data=<Large Block of Data Here
(~ 32 KB) > />
The reason I am doing this is because the data used to parameterize
the image is generated on the fly. Eventually I want something like
this:
Dynamic HTML Page
-------------------------------
1. Complicated algorithm to generate data and store it in memory
2. Inline Image to visualize generated data in graphic form.
(This is something I am hoping I can generate on the fly with another
script.)
3. HTML table to visualize generated data in tabluar form.
------------------End of HTML Page------------------
The problem here is that I don't want to call or write the algorithm
(1 above) twice when displaying it in graphic and tabular form.
So if I want to pass a large block of data to PhotoDisplay.ashx below
through HTTP POST, can I do it?
<img id="ss_img" src="PhotoDisplay.ashx?data=<Large Block of Data Here
(~ 32 KB) > />
Thanks a lot,
computer_guy
> FYI - the class file should have an ".ashx" extension.
>
[quoted text clipped - 24 lines]
>
> - Show quoted text -