不全屏时保存WebBrowser控件sceenshot

时间:2012-03-02 15:39:41

标签: c# winforms webbrowser-control

我得到了一个WebBrowser控件中包含的网页截图,就像所描述的herehere一样,但我遇到了一个问题:如果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);
            }
        }
    }
}

性能不是问题,因为它永远不会用于生产。

3 个答案:

答案 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并将其渲染为图像?

修改

此链接有助于我的建议:

How do I save a web page to image