日期:2014-05-17  浏览次数:21049 次

C#对指定的网页进行截图

碰到一个项目,需要对指定的网页进行截图保存,晕死!?
需求永远都是怪异的.....?
解决是关键~?
遂写了以下代码,快准狠!(因为赶时间!)?
可以实现对指定的页面获取,按指定的大小生成缩略图,当然也可以1:1的产生图,?
页面上的javascript?运行对截图貌似没任何影响,相当的正常,我个人都觉得很神奇。??
首先对项目添加系统引用?
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;??
????????????}