说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

C#实现生成网站快照缩略图片

HTML文档下载 WORD文档下载 PDF文档下载
C#利用WebBrowser控件实现生成网站快照缩略图片

下载源代码

我总是在想如何把我的博客网页生成缩略图快照。昨天我有一些空闲时间来思考如何在C#中完成。我用WebBrowser控件实现了这个功能,下面是我的实现方法。


我创建了四个区域,一个是WebBrowser控件,另外三个是Bitmap对象分别对应3中不同尺寸的缩略图。使用这三个位图对象其实是没有必要的,我们可以只用一个对象显示三种不同的尺寸,但它使我保存按钮的代码减少了一些。在构造函数中初始化WebBrowser控件的大小为800*600,这是绝大多数网站最小的可见尺寸,我也去掉了滚动条和初始化DocumentCompleted事件委托。

private WebBrowser wb = new WebBrowser();  private Bitmap screenshot300x225;  private Bitmap screenshot200x150;  private Bitmap screenshot100x75;    public MainForm()  {      InitializeComponent();        wb.Height = 600;      wb.Width = 800;      wb.ScrollBarsEnabled = false;      wb.DocumentCompleted += new          WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted);  }  

WebBrowser的DocumentCompleted事件处理中可以生成截图快照,这是唯一可以调用DrawToBitmap方法的地方。DrawToBitmap是从WebBrowserBase对象继承的方法,MSDN上说“该API支持.NET Framework基础结构,但不适合直接在代码中使用”,所以它不在IntelliSense中可见。它有两个参数,第一个是存储截图的位图对象,第二个Rectangle对象定义了截图的范围。三个位图对象初始化并显示在PictureBox控件中。

 

void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)  {      Bitmap bmp = new Bitmap(800, 600);        wb.DrawToBitmap(bmp,          new Rectangle(wb.Location.X, wb.Location.Y, wb.Width, wb.Height));        screenshot100x75 = new Bitmap(bmp, 100, 75);      screenshot200x150 = new Bitmap(bmp, 200, 150);      screenshot300x225 = new Bitmap(bmp, 300, 250);        smallPictureBox.Image = screenshot100x75;      mediumPictureBox.Image = screenshot200x150;      largePictureBox.Image = screenshot300x225;        this.Cursor = Cursors.Default;  }    private void captureButton_Click(object sender, EventArgs e)  {      this.Cursor = Cursors.WaitCursor;        wb.Navigate(urlTextBox.Text);  }    private void saveSmallButton_Click(object sender, EventArgs e)  {      if (screenshot100x75 != null)      {          if (saveFileDialog1.ShowDialog(this) == DialogResult.OK)              screenshot100x75.Save(saveFileDialog1.FileName);      }  }    private void saveMediumButton_Click(object sender, EventArgs e)  {      if (screenshot200x150 != null)      {          if (saveFileDialog1.ShowDialog(this) == DialogResult.OK)              screenshot200x150.Save(saveFileDialog1.FileName);      }  }    private void saveLargeButton_Click(object sender, EventArgs e)  {      if (screenshot300x225 != null)      {          if (saveFileDialog1.ShowDialog(this) == DialogResult.OK)              screenshot300x225.Save(saveFileDialog1.FileName);      }  }  

 

 

 

备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘