保存WPF Web浏览器框架的屏幕截图

时间:2010-10-07 19:03:37

标签: .net wpf screenshot

我的WPF应用程序中有一个显示html页面的Frame元素,并希望将Frame的屏幕截图保存为图像。

在谷歌的帮助下,我有这个代码:

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 个答案:

答案 0 :(得分:4)

原来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);