使用WebView控件(WPF或UWP)拍摄网页快照

问题描述 投票:0回答:1

我需要拍摄使用通过 EdgeHTML (Spartan) 视图引擎渲染的 JS Service Worker 的网页快照,该引擎可通过 WPF 和 UWP 中的 WebView 1 控件获得。

我在WPF中使用WebView时遇到的问题:不知道如何截图。如果我使用 RenderTargetBitmap 之类的东西(添加命名空间,因为有多个 RenderTargetBitmap):

var bmp = new System.Windows.Media.Imaging.RenderTargetBitmap(1000, 1000, 72, 72, PixelFormats.Default);
bmp.Render(webView1);
var frame = System.Windows.Media.Imaging.BitmapFrame.Create(bmp);
var encoder = new JpegBitmapEncoder();
encoder.Frames.Add(frame);
using (var stream = File.Create("fooo.jpg"))
{
    encoder.Save(stream);
}

它只是渲染并保存黑帧。

在 UWP 中,我实际上可以拍摄快照并将其保存到文件中,因为 WebView 有这样的方法:

var pics = KnownFolders.SavedPictures;
var file = await pics.CreateFileAsync("foo.jpg");
using (var fileStream = await file.OpenStreamForWriteAsync())
{
    var ras = fileStream.AsRandomAccessStream();
    await webView1.CapturePreviewToStreamAsync(ras);
}

但这里的问题是,我必须渲染的页面正在使用 ServiceWorker 进行一些 API 模拟,并且在 UWP 应用程序服务中工作不起作用,而与 WPF 相比,它工作得很好! 无法弄清楚为什么 Service Worker 没有在 UWP 嵌入式浏览器中注册。

显然,WebView 控件即使封装了相同的旧版 Edge 引擎,在 WPF 中与 UWP 也有很大不同。

https://www.whatismybrowser.com/ 显示 WPF 和 UWP 中相同、正确的浏览器(Edge 18、EdgeHTML 视图引擎)。

问题是:

  • 如何在 WPF 中保存快照,或者
  • 如何在 UWP 中启用 Service Worker
c# .net wpf uwp
1个回答
0
投票
using(FileStream fs = File.Create("capture.jpg"))
 {
     await webView2.CoreWebView2.CapturePreviewAsync(Microsoft.Web.WebView2.Core.CoreWebView2CapturePreviewImageFormat.Jpeg, fs);
 }
© www.soinside.com 2019 - 2024. All rights reserved.