我得到了一个WebBrowser控件中包含的网页截图,就像所描述的here和here一样,但我遇到了一个问题:如果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);
}
}
}
}
性能不是问题,因为它永远不会用于生产。
答案 0 :(得分:2)
由于我的WebBrowser控件被隐藏了,我只需调整它就可以解决这个问题。如果未隐藏控件,则会在保存屏幕截图时重新调整大小。
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的建议重新调整大小,但这会产生一些性能影响。
答案 1 :(得分:1)
你是否可以创建一个按钮,当它拍摄快照时它会获取当前的URL并将其放入一个新的WeBrowser对象中,然后将其扩展到更大的尺寸,这样当它截取截图时它的全尺寸?
答案 2 :(得分:0)
不幸的是,这是不可能的,因为“ScreenShot”记录了当时屏幕上的可见项目
也许您可以考虑保存HTML并将其渲染为图像?
修改强>
此链接有助于我的建议: