获取web浏览器控件的屏幕截图



关于这一点有很多线索,但没有一个是清楚的,我没有尝试实际上甚至工作正确。

什么是代码,以获得整个web浏览器控件的内容(即使是那是离开屏幕)?

看起来他们确实有:

webBrowser1.DrawToBitmap(); // but its unsupported and doesnt work
    第三方api -不要浪费我的时间
  1. 。DrawToBitmap和nonanswer-links
  2. 100个错误答案
  3. 只是截图

确保在DocumentCompleted事件中调用该方法。

webBrowser1.Width = wb.Document.Body.ScrollRectangle.Width;
webBrowser1.Height = wb.Document.Body.ScrollRectangle.Height;
Bitmap bitmap = new Bitmap(webBrowser1.Width, webBrowser1.Height);
webBrowser1.DrawToBitmap(bitmap, new Rectangle(0, 0, webBrowser1.Width, webBrowser1.Height));

我上周在我的项目中做了一个类似的函数,阅读了一些关于这个主题的帖子,包括你的链接。我想分享我的经验:

这个函数的关键部分是System.Windows.Forms.WebBrowser.DrawToBitmap方法。

但是它不支持并且不能工作

它被支持并且工作,但并不总是工作得很好。在某些情况下,你会得到一个空白的图像截图(根据我的经验,它加载的html越复杂,失败的可能性就越大)。在我的项目中,只有非常简单和格式良好的html将被加载到WebBrowser控件中,所以我从来没有得到空白图像)。

无论如何我也没有100%完美的解决方案。这里是我的核心代码的一部分,希望它能帮助(它适用于ASP。. NET MVC 3).

using (var browser = new System.Windows.Forms.WebBrowser())
{
     browser.DocumentCompleted += delegate
     {
         using (var pic = new Bitmap(browser.Width, browser.Height))
         {
             browser.DrawToBitmap(pic, new Rectangle(0, 0, pic.Width, pic.Height));
             pic.Save(imagePath);
         }
     };
     browser.Navigate(Server.MapPath("~") + htmlPath); //a file or a url
     browser.ScrollBarsEnabled = false;
     while (browser.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete)
     {
         System.Windows.Forms.Application.DoEvents();
     }
}

最新更新