Сохранить скриншот веб-браузера WPF Frame - PullRequest
5 голосов
/ 07 октября 2010

У меня есть элемент Frame, отображающий html-страницу в моем приложении WPF, и я хочу сохранить снимок экрана в виде изображения.

С помощью Google у меня есть этот код:

Size size = new Size(PreviewFrame.ActualWidth, PreviewFrame.ActualHeight);
PreviewFrame.Measure(size);
PreviewFrame.Arrange(new Rect(size));

var renderBitmap = new RenderTargetBitmap(
            (int)size.Width,
            (int)size.Height,
            96d,
            96d,
            PixelFormats.Pbgra32);
renderBitmap.Render(PreviewFrame);

Но все, что я когда-либо получаю, - это пустое изображение.

Любые мысли о том, как исправить этот код, и / или другой способ запечатлеть веб-страницу как изображение в моемприложение?

1 Ответ

4 голосов
/ 08 октября 2010

Оказывается, класс GDI Graphics имеет метод CopyFromScreen, который хорошо работает и захватывает содержимое Frame:

var topLeftCorner = PreviewFrame.PointToScreen(new System.Windows.Point(0, 0));
var topLeftGdiPoint = new System.Drawing.Point((int)topLeftCorner.X, (int)topLeftCorner.Y);
var size = new System.Drawing.Size((int)PreviewFrame.ActualWidth, (int)PreviewFrame.ActualHeight);

var screenShot = new Bitmap((int)PreviewFrame.ActualWidth, (int)PreviewFrame.ActualHeight);

using (var graphics = Graphics.FromImage(screenShot)) {
    graphics.CopyFromScreen(topLeftGdiPoint, new System.Drawing.Point(),
        size, CopyPixelOperation.SourceCopy);
}

screenShot.Save(@"C:\screenshot.png", ImageFormat.Png);
...