首先對項目添加系統引用

System.Drawing;

System.Drawing.Design;

System.Windows.Forms;

獲取指定網頁並轉換成圖片的類:

using System;

using System.Collections.Generic;

using System.Text;

using System.Drawing;

using System.Drawing.Drawing2D;

using System.Drawing.Imaging;

using System.Windows.Forms;

using System.Diagnostics;

namespace MyLib


...{

public class GetImage


...{

private int S_Height;

private int S_Width;

private int F_Height;

private int F_Width;

private string MyURL;

public int ScreenHeight


...{


get ...{ return S_Height; }


set ...{ S_Height = value; }

}

public int ScreenWidth


...{


get ...{ return S_Width; }


set ...{ S_Width = value; }

}

public int ImageHeight


...{


get ...{ return F_Height; }


set ...{ F_Height = value; }

}

public int ImageWidth


...{


get ...{ return F_Width; }


set ...{ F_Width = value; }

}

public string WebSite


...{


get ...{ return MyURL; }


set ...{ MyURL = value; }

}

public GetImage(string WebSite, int ScreenWidth, int ScreenHeight, int ImageWidth, int ImageHeight)


...{

this.WebSite = WebSite;

this.ScreenWidth = ScreenWidth;

this.ScreenHeight = ScreenHeight;

this.ImageHeight = ImageHeight;

this.ImageWidth = ImageWidth;

}

public Bitmap GetBitmap()


...{

WebPageBitmap Shot = new WebPageBitmap(this.WebSite, this.ScreenWidth, this.ScreenHeight);

Shot.GetIt();

Bitmap Pic = Shot.DrawBitmap(this.ImageHeight, this.ImageWidth);

return Pic;

}

}

class WebPageBitmap


...{

WebBrowser MyBrowser;

string URL;

int Height;

int Width;

public WebPageBitmap(string url, int width, int height)


...{

this.Height = height;

this.Width = width;

this.URL = url;

MyBrowser = new WebBrowser();

MyBrowser.ScrollBarsEnabled = false;

MyBrowser.Size = new Size(this.Width, this.Height);

}

public void GetIt()


...{

MyBrowser.Navigate(this.URL);

while (MyBrowser.ReadyState != WebBrowserReadyState.Complete)


...{

Application.DoEvents();

}

}

public Bitmap DrawBitmap(int theight, int twidth)


...{

Bitmap myBitmap = new Bitmap(Width, Height);

Rectangle DrawRect = new Rectangle(0, 0, Width, Height);

MyBrowser.DrawToBitmap(myBitmap, DrawRect);

System.Drawing.Image imgOutput = myBitmap;

System.Drawing.Image oThumbNail = new Bitmap(twidth, theight, imgOutput.PixelFormat);

Graphics g = Graphics.FromImage(oThumbNail);

g.CompositingQuality = CompositingQuality.HighSpeed;

g.SmoothingMode = SmoothingMode.HighSpeed;

g.InterpolationMode = InterpolationMode.HighQualityBilinear;

Rectangle oRectangle = new Rectangle(0, 0, twidth, theight);

g.DrawImage(imgOutput, oRectangle);

try


...{

return (Bitmap)oThumbNail;

}

catch (Exception ex)


...{

return null;

}

finally


...{

imgOutput.Dispose();

imgOutput = null;

MyBrowser.Dispose();

MyBrowser = null;

}

}

}

}

以下是調用方法,懶省事的方法,嘿嘿,趕時間就不說什麼了,反正上面的抓取轉換類已經寫出來了,大家盡情的用異步,線程等方法自己玩吧!~

string UrlPath;

bool CaptureState = false;

Guid guid;

protected bool SaveOriginalPageToImage(Guid myGuid)


...{

//使用guid 來命名

guid = myGuid;

if (this.CurrentPageAct == PageAct.Edit)

...{

string PagePath = Request.Url.LocalPath;

PagePath = PagePath.Replace("Operation", "Capture");

UrlPath = PagePath + "?act=vIEw&ProjectNo=" + _projectNo;

Thread NewTh = new Thread(CaptureImage);

NewTh.SetApartmentState(ApartmentState.STA);

NewTh.Start();

while (NewTh.ThreadState == ThreadState.Running)


...{

}

//返回截取狀態

return CaptureState;

}

return false;

}


/**//**//**//// <summary>

/// 捕獲屏幕

/// </summary>

/// <param name="UrlPath"></param>

/// <returns></returns>

public void CaptureImage()

...{

try


...{

string url = "http://" + Request.Url.Host + ":" + Request.Url.Port.ToString();

url = url + UrlPath;

GetImage thumb = new GetImage(url, 1024, 1200, 1024, 1200);

System.Drawing.Bitmap x = thumb.GetBitmap();

string FileName = DateTime.Now.ToString("yyyyMMddhhmmss");

x.Save(Server.MapPath("~/Capture/SavePage") + "\" + guid + ".jpg");

CaptureState = true;

}

catch (Exception ex)


...{

CaptureState = false;

}

}