How to get thumbnail image of a website.

10 10 2008

Quite often, in web site development we need to capture the thumbnail image of particular website. Following is the way to do it.

Step 1. Make a new class which will hold all neccessary things to capture the thumbnail

public class WebsiteThumbnailImageGenerator
{
public static Bitmap GetWebSiteThumbnail(string Url, int BrowserWidth, int BrowserHeight, int ThumbnailWidth, int ThumbnailHeight)
{
WebsiteThumbnailImage thumbnailGenerator = new WebsiteThumbnailImage(Url, BrowserWidth, BrowserHeight, ThumbnailWidth, ThumbnailHeight);
return thumbnailGenerator.GenerateWebSiteThumbnailImage();
}

private class WebsiteThumbnailImage
{
public WebsiteThumbnailImage(string Url, int BrowserWidth, int BrowserHeight, int ThumbnailWidth, int ThumbnailHeight)
{
this.m_Url = Url;
this.m_BrowserWidth = BrowserWidth;
this.m_BrowserHeight = BrowserHeight;
this.m_ThumbnailHeight = ThumbnailHeight;
this.m_ThumbnailWidth = ThumbnailWidth;
}

private string m_Url = null;
public string Url
{
get
{
return m_Url;
}
set
{
m_Url = value;
}
}

private Bitmap m_Bitmap = null;
public Bitmap ThumbnailImage
{
get
{
return m_Bitmap;
}
}

private int m_ThumbnailWidth;
public int ThumbnailWidth
{
get
{
return m_ThumbnailWidth;
}
set
{
m_ThumbnailWidth = value;
}
}

private int m_ThumbnailHeight;
public int ThumbnailHeight
{
get
{
return m_ThumbnailHeight;
}
set
{
m_ThumbnailHeight = value;
}
}

private int m_BrowserWidth;
public int BrowserWidth
{
get
{
return m_BrowserWidth;
}
set
{
m_BrowserWidth = value;
}
}

private int m_BrowserHeight;
public int BrowserHeight
{
get
{
return m_BrowserHeight;
}
set
{
m_BrowserHeight = value;
}
}

public Bitmap GenerateWebSiteThumbnailImage()
{
Thread m_thread = new Thread(new ThreadStart(_GenerateWebSiteThumbnailImage));
m_thread.SetApartmentState(ApartmentState.STA);
m_thread.Start();
m_thread.Join();
return m_Bitmap;
}

private void _GenerateWebSiteThumbnailImage()
{
WebBrowser m_WebBrowser = new WebBrowser();
m_WebBrowser.ScrollBarsEnabled = false;
m_WebBrowser.Navigate(m_Url);
m_WebBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted);
while (m_WebBrowser.ReadyState != WebBrowserReadyState.Complete)
Application.DoEvents();
m_WebBrowser.Dispose();
}

private void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser m_WebBrowser = (WebBrowser)sender;
m_WebBrowser.ClientSize = new Size(this.m_BrowserWidth, this.m_BrowserHeight);
m_WebBrowser.ScrollBarsEnabled = false;
m_Bitmap = new Bitmap(m_WebBrowser.Bounds.Width, m_WebBrowser.Bounds.Height);
m_WebBrowser.BringToFront();
m_WebBrowser.DrawToBitmap(m_Bitmap, m_WebBrowser.Bounds);
m_Bitmap = (Bitmap)m_Bitmap.GetThumbnailImage(m_ThumbnailWidth, m_ThumbnailHeight, null, IntPtr.Zero);
}
}
}

Step 2: Call the GetWebSiteThumbnail() function of class like this

string address = www.google.com;

int width  = 200;

int height = 140;

int capWidth = 800;

int capHeight = 600;

Bitmap thumbnail = WebsiteThumbnailImageGenerator.GetWebSiteThumbnail(address, capWidth, capHeight, width, height);

Step 3 : Save the image to particular place of your website.

thumbnail.Save(Server.MapPath(“FolderName\\”) + “MyImageName”,ImageFormat.Jpeg);

Now you can find a jpeg image on your desired location.

Optional enhancement:

You can also directly give it on your aspx page like

On Step 3: thumbnail.Save (Response.OutputStream, ImageFormat.Jpeg);

<asp:Image ID=”Image1″ ImageUrl=”snapshot.aspx?site=www.google.com&width=100&height=80&capWidth=800&capHeight=600″ runat=”server” />

and on this image place you will have image.





Hot to add CSS style to your Controls at runtime?

27 09 2008

You can add css style to any of asp.net control dynamically as given below

btnViewed.Style["font-weight"] = “bold”;

Hopefully it will help.





Finding control In Ajax Tab container

27 09 2008

Suppose you have a repeater control inside ajax tab container and you want to bind data with that repeater. If on your page you try to directly bind data with it, it will generate error and say that “repeater is not found”.

You have to first find the repeater and then you can do all the things with it as you do in normal .

Control myControl = TabContainer1.Tabs[0].FindControl(“RepeaterName”);

Repeater MyRepeater = (Repeater)myControl;

or simply in single step

Repeater MyRepeater =(Repeater)TabContainer1.Tabs[0].FindControl(“RepeaterName“);

Now you can bind data with it or do any operation with this repeater.

Hopefully it will help, if find helpful please leave a comment