我正在使用以下技术:
显然,这是由于方法
尝试对网页进行屏幕截图。当
WebBrowser
控件放置在WinForm
上时,我已经能够成功地运行下面的代码。但是,在线程内运行时,它会提供桌面的任意图像而失败。请注意不要删除任何HTML标签并准确保留格式。Thread browserThread = new Thread(() =>
{
WebBrowser br = new WebBrowser();
br.DocumentCompleted += webBrowser1_DocumentCompleted;
br.ProgressChanged += webBrowser1_ProgressChanged;
br.ScriptErrorsSuppressed = true;
br.Navigate(url);
Application.Run();
});
browserThread.SetApartmentState(ApartmentState.STA);
browserThread.Start();
private Image TakeSnapShot(WebBrowser browser)
{
int width;
int height;
width = browser.ClientRectangle.Width;
height = browser.ClientRectangle.Height;
Bitmap image = new Bitmap(width, height);
using (Graphics graphics = Graphics.FromImage(image))
{
Point p = new Point(0, 0);
Point upperLeftSource = browser.PointToScreen(p);
Point upperLeftDestination = new Point(0, 0);
Size blockRegionSize = browser.ClientRectangle.Size;
blockRegionSize.Width = blockRegionSize.Width - 15;
blockRegionSize.Height = blockRegionSize.Height - 15;
graphics.CopyFromScreen(upperLeftSource, upperLeftDestination, blockRegionSize);
}
return image;
}
显然,这是由于方法
Graphics.CopyFromScreen()
引起的,但我不知道是否有其他方法来解决这个问题。任何人都能提出如何解决这个问题的建议吗?或者我的唯一选择是创建一个表单,添加控件,使其可见,然后进行屏幕截取?由于显而易见的原因,我希望避免这种方法。
using
语句的代码示例。叹气. - Robert Harvey