首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2012-10-14 
C#对指定的网页进行截图碰到一个项目,需要对指定的网页进行截图保存,晕死!?需求永远都是怪异的.....?解决

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;??
????????????}??
????????????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;??
????????}??
????}??

热点排行