【问题标题】:Save screenshot of WPF web browser Frame保存 WPF Web 浏览器框架的屏幕截图
【发布时间】:2010-10-07 19:03:37
【问题描述】:

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

在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);

但我得到的只是一张空白图片。

关于如何修复此代码和/或以其他方式在我的应用中将网页捕获为图像的任何想法?

【问题讨论】:

    标签: .net wpf screenshot


    【解决方案1】:

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

    【讨论】:

    • CopyFromScreen 不支持 DPI,因此如果您的用户在 100% (96dpi) 以外的 DPI 设置中运行,则生成的图像将不正确。更现代的 RenderTargetBitmap 应该可以解决这个问题,但似乎不适用于 WPF WebBrowser。
    • 今天是否有任何解决方案可以让 WPF WebBrowser 正确呈现截屏图像,而与使用的 DPI 设置无关?
    猜你喜欢
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 2017-02-01
    • 2013-03-29
    相关资源
    最近更新 更多