1

私はC#で開発を開始し、サーフェスをバイトバッファーまたは画像に変換しようとしています(後でバイトバッファーに変換するためにも)。

私は他の質問でこのコードを見ました:

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

しかし、WebビューにはRender()がなく、インポートする必要のあるライブラリについても彼は言っていません。

ここで停止します:

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

4 に答える 4

8

最近、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

于 2013-03-19T23:08:19.790 に答える
2
  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;
于 2013-10-17T01:57:13.950 に答える
2

このようなことを意味しますか?

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();
    }
}
于 2013-05-30T06:58:01.567 に答える
-1

バッファメソッドはどうですか?それはあなたが望むものでなければなりません。

于 2013-03-01T21:26:18.180 に答える