三行代码  ›  专栏  ›  技术社区  ›  Thomas

如何从CapturePreviewAsync流保存图像?

  •  0
  • Thomas  · 技术社区  · 1 周前

    我对这件事不太了解 Async

    Private Sub WebView22_Click(sender As Object, e As EventArgs) Handles WebView22.Click
        grabpic()
    End Sub
    
    Public Async Function grabpic() As Threading.Tasks.Task
        Dim ms As System.IO.Stream
        Await (WebView22.CoreWebView2.CapturePreviewAsync(CoreWebView2CapturePreviewImageFormat.Jpeg, ms))
        Dim file As New System.IO.FileStream("C:\temp\test.jpg", IO.FileMode.Create)
        ms.CopyTo(file)
        ms.Close()
    End Function
    
    1 回复  |  直到 1 周前
        1
  •  0
  •   41686d6564    1 周前

    您的代码存在一些问题:

    1. 你不是在等那场比赛 graphics() Click WebView2控件的事件(假设它实际上可以被触发)。因此,您可能应该使用按钮点击进行测试,例如。

    2. 你没有初始化 ms 这将导致NullReferenceException。您可能想要创建的实例 MemoryStream .

    3. 你在打电话吗 ms.CopyTo 之后 向溪流写信。此时,当前位置将位于流的末尾,不会写入任何内容 file .您需要在开始时设置位置(即。, ms.Seek(0, SeekOrigin.Begin) 或使用 ms.WriteTo()

    有了这一点 图形() 方法将如下所示:

    Public Async Function grabpic() As Task
        Using ms As New IO.MemoryStream()
            Await WebView22.CoreWebView2.CapturePreviewAsync(
                CoreWebView2CapturePreviewImageFormat.Jpeg, ms)
            Using file As New IO.FileStream("C:\temp\test.jpg", IO.FileMode.Create)
                ms.Seek(0, IO.SeekOrigin.Begin)
                ms.CopyTo(file)
            End Using
        End Using
    End Function
    

    然而

    Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Await grabpic()
    End Sub
    
    Public Async Function grabpic() As Task
        Using file As New IO.FileStream("C:\temp\test.jpg", IO.FileMode.Create)
            Await WebView22.CoreWebView2.CapturePreviewAsync(
                CoreWebView2CapturePreviewImageFormat.Jpeg, file)
        End Using
    End Function