代码之家  ›  专栏  ›  技术社区  ›  Hank

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

  •  5
  • Hank  · 技术社区  · 14 年前

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

    在谷歌的帮助下,我得到了以下代码:

    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 回复  |  直到 12 年前
        1
  •  4
  •   Hank    14 年前

    结果是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);