未全屏显示时保存WebBrowser控件屏幕快照

问题描述 投票:2回答:3

我获得了herehere所述的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);
            }
        }
    }
}

性能不是问题,因为它将永远不会在生产中使用。

c# winforms webbrowser-control screenshot
3个回答
1
投票
您能否制作一个按钮,当它拍摄快照时,它将获取当前URL,并将其放入一个新的WeBrowser对象中,然后将其扩展为更大的尺寸,以便当它拍摄截图时,它为完整尺寸?

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的建议调整其大小,但这会影响性能。

0
投票
不幸的是,这是不可能的,因为“ ScreenShot”当时记录了屏幕上的可见项目

也许您可以考虑保存HTML并将其渲染为图像?

编辑:

此链接可以帮助我的建议:

How do I save a web page to image

© www.soinside.com 2019 - 2024. All rights reserved.