Сохраните контроль над WebBrowser, пока не в полноэкранном режиме - PullRequest
2 голосов
/ 02 марта 2012

Я получаю снимок экрана с веб-страницей, содержащейся в элементе управления WebBrowser, как описано выше здесь и здесь , но у меня возникает проблема: если элемент управления WebBrowser не работает на весь экранснимок экрана обрезается до размера элемента управления.

Можно ли сохранить снимок экрана всей страницы, если элемент управления WebBrowser не работает в полноэкранном режиме?

Это код I 'm в настоящее время используется для сохранения снимка экрана:

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 ]

2 голосов
/ 05 марта 2012

Так как мой элемент управления 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 голос
/ 02 марта 2012

Не могли бы вы сделать кнопку, которая при получении снимка снимает текущий URL-адрес и помещает его в новый объект WeBrowser, который затем расширяется до гораздо большего размера, поэтому при получении снимка экрана он становится полноразмерным?

0 голосов
/ 02 марта 2012

К сожалению, это невозможно, так как «ScreenShot» записывает видимые элементы на экране в это время

Может быть, вы могли бы вместо этого сохранить HTML и отобразить его как изображение?

EDIT:

Эта ссылка может помочь с моим предложением:

Как сохранить веб-страницу в изображение

...