如何保存来自 CapturePreviewAsync 流的图像?
How do I save an image from CapturePreviewAsync stream?
我不太了解 Async
,但是当 运行 时我没有得到任何错误,而且我仍然没有在 C:\temp\test.jpg 中得到图像- 我做错了什么?
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
您的代码存在一些问题:
您没有等待 graphics()
函数,因此异常被默默地吞噬了。此外,我不确定是什么触发了 WebView2 控件的 Click
事件(假设它实际上可以被触发)。因此,例如,您可能应该使用按钮点击进行测试。
您根本没有初始化 ms
,这将导致 NullReferenceException。您可能想创建 MemoryStream
.
的实例
您正在 ms.CopyTo
写入流后调用。届时,当前位置将位于流的末尾,并且不会向 file
写入任何内容。您需要在开头设置位置(即 ms.Seek(0, SeekOrigin.Begin)
或使用 ms.WriteTo()
代替。
这样,graphics()
方法将如下所示:
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
但是,在这种情况下您并不真正需要 MemoryStream。您可以直接写入 FileStream。最终代码应如下所示:
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
我不太了解 Async
,但是当 运行 时我没有得到任何错误,而且我仍然没有在 C:\temp\test.jpg 中得到图像- 我做错了什么?
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
您的代码存在一些问题:
您没有等待
graphics()
函数,因此异常被默默地吞噬了。此外,我不确定是什么触发了 WebView2 控件的Click
事件(假设它实际上可以被触发)。因此,例如,您可能应该使用按钮点击进行测试。您根本没有初始化
的实例ms
,这将导致 NullReferenceException。您可能想创建MemoryStream
.您正在
ms.CopyTo
写入流后调用。届时,当前位置将位于流的末尾,并且不会向file
写入任何内容。您需要在开头设置位置(即ms.Seek(0, SeekOrigin.Begin)
或使用ms.WriteTo()
代替。
这样,graphics()
方法将如下所示:
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
但是,在这种情况下您并不真正需要 MemoryStream。您可以直接写入 FileStream。最终代码应如下所示:
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