我获得了here和here所述的WebBrowser控件中包含的网页的屏幕截图,但是我有一个问题:如果WebBrowser控件未处于全屏状态,则屏幕截图会被裁剪为控制。
如果WebBrowser控件未全屏显示,是否可以保存整个页面的屏幕截图?
这是我当前用于保存屏幕截图的代码:
private void SaveBrowserScreenshot(WebBrowser browser, string path, string name)
{
const int width = 1024;
const int height = 768;
const string extension = ".png";
using (var bitmap = new Bitmap(width, height))
{
var rect = new Rectangle(0, 0, width, height);
browser.DrawToBitmap(bitmap, rect);
using (var image = bitmap)
{
using (var graphic = Graphics.FromImage(image))
{
graphic.CompositingQuality = CompositingQuality.HighQuality;
graphic.SmoothingMode = SmoothingMode.HighQuality;
graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
image.Save(String.Concat(path, "\\", name, extension), ImageFormat.Png);
}
}
}
}
性能不是问题,因为它将永远不会在生产中使用。
private void SaveBrowserScreenshot(WebBrowser browser, string path, string name)
{
const string extension = ".png";
int width = Math.Max(1024, Screen.PrimaryScreen.Bounds.Width);
int height = Math.Max(768, Screen.PrimaryScreen.Bounds.Height);
int originalWidth = browser.Width;
int originalHeight = browser.Heignt;
browser.Width = width;
browser.Heigt = height;
using (var bitmap = new Bitmap(width, height))
{
var rect = new Rectangle(0, 0, width, height);
browser.DrawToBitmap(bitmap, rect);
using (var image = bitmap)
{
using (var graphic = Graphics.FromImage(image))
{
graphic.CompositingQuality = CompositingQuality.HighQuality;
graphic.SmoothingMode = SmoothingMode.HighQuality;
graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
image.Save(String.Concat(path, "\\", name, extension), ImageFormat.Png);
}
}
}
browser.Width = originalWidth;
browser.Height = originalHeight;
}
作为替代,您可以创建另一个WebBrowser控件,将其隐藏,然后按照willDaBeast的建议调整其大小,但这会影响性能。
也许您可以考虑保存HTML并将其渲染为图像?
编辑:
此链接可以帮助我的建议: