C#学习教程:Awesomium Webview Surface to Byte Buffer或PictureBox分享


Awesomium Webview Surface to Byte Buffer或PictureBox

我开始在C#中开发,我正在尝试将表面转换为字节缓冲区或图片(以后转换为字节缓冲区)。

我在其他问题上看到了这段代码:

string fileName = Path.GetTempFileName(); webView2.Render().SaveToPng(fileName); byte[] bytes = File.ReadAllBytes(fileName); File.Delete(fileName); MemoryStream ms = new MemoryStream(bytes); 

但是,webview没有Render(),他没有说我需要导入哪些库。

我在这里停下来:

 var view = (WebView)WebCore.Views.Last(); WebCore.Update(); BitmapSurface surface = (BitmapSurface)view.Surface; surface.?? 

最近Awesomium有很多无证的变化。

尝试使用WebView.Surface而不是WebView.Render

 using (WebView vw = WebCore.CreateWebView(1024, 768)) { vw.Source = new Uri("http://www.google.com"); while (vw.IsLoading) { WebCore.Update(); } ((BitmapSurface)vw.Surface).SaveToJPEG("D:\google.jpg"); PictureBox1.Load("D:\google.jpg"); WebCore.Shutdown(); } 

评论中指出了另一组变化。 只是为了正确起见,这里有一个更新的代码和文档的链接。

 using ( webView = WebCore.CreateWebView( 800, 600 ) ) { webView.Source = new Uri( "http://www.google.com" ); view.LoadingFrameComplete += ( s, e ) => { if ( !e.IsMainFrame ) return; BitmapSurface surface = (BitmapSurface)view.Surface; surface.SaveToPNG( "result.png", true ); WebCore.Shutdown(); } } WebCore.Run(); 

资料来源: http : //docs.awesomium.net/html/b2fc3fe8-72bd-4baf-980f-b9b9456d5ca4.htm

你的意思是这样的?

 private static byte[] getWebViewScreenshotAsBytes(ref WebView myWebView) { using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) { using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(myWebView.Width, myWebView.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)) { BitmapSurface bmpSurface = (BitmapSurface)myWebView.Surface; BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.WriteOnly, bmp.PixelFormat); bmpSurface.CopyTo(bmpData.Scan0, bmpSurface.RowSpan, 4, false, false); bmp.UnlockBits(bmpData); bmp.Save(ms, ImageFormat.Png); } return ms.ToArray(); } } 

  double width = 800; double height = 1000; var webView = WebCore.CreateWebView(width, height, WebViewType.Offscreen); webView.Source = new Uri("https://www.google.com/"); while (webView.IsLoading) { WebCore.Update(); } var bitmapSurface = (BitmapSurface)webView.Surface; var writeableBitmap = new WriteableBitmap(width, height, 96, 96, PixelFormats.Bgra32, null); writeableBitmap.Lock(); bitmapSurface.CopyTo(writeableBitmap.BackBuffer, bitmapSurface.RowSpan, 4, false, false); writeableBitmap.AddDirtyRect(new Int32Rect(0, 0, width, height)); writeableBitmap.Unlock(); var image = new Image(); image.Source = writeableBitmap; 

缓冲方法怎么样? 那应该是你想要的。

上述就是C#学习教程:Awesomium Webview Surface to Byte Buffer或PictureBox分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1031905.html

发表评论

邮箱地址不会被公开。 必填项已用*标注