如何在不截屏的情况下将当前表单保存到vb.net中的图像。我希望用户可以选择使用“保存文件”对话框来选择他们的文件名,如果需要,我将采取屏幕截图的方法,但我不希望这样做。
到目前为止,我正在WinForms中使用CefSharp,并将私有类传递给程序的javascript / html端。当用户单击html按钮保存图像时,这将在上述类中调用一个方法,该方法应打开一个保存文件对话框以绘制图像。
我尝试了包括截屏的方法,但是出于明显的原因,我无法使用保存文件对话框,因为这会隐藏要尝试拍摄图像的帧。也许我没有看到解决此问题的方法。
我尝试了其他方法,这些方法涉及创建Graphics对象,但是它们总是返回空白图像。我在某处看到一个帖子,说不要使用CreateGraphics()函数,而要使用图片框事件。我不确定如何从私有类正确调用当前表单中存在的图片框(传递给javascript的类已定义为私有类,与我的表单的vb代码在同一.vb文件中)>
Public Sub saveImage(dataURL As String, format As String)
Dim t As New Thread(Sub()
Dim sfd As New SaveFileDialog()
sfd.Filter = "Png Image|*.png|Jpeg Image|*.jpeg| Jpg Image|*.jpg"
sfd.Filter = format + " Image|" + "*." + format.ToLower()
sfd.Title = "Save Plot Image."
sfd.FilterIndex = 2
If sfd.ShowDialog() = DialogResult.OK Then
' Dim array As String() = dataURL.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
' Dim byteArray As Byte() = Convert.FromBase64String(array.GetValue(1))
' Dim ms As MemoryStream = New MemoryStream(byteArray)
' Dim image = System.Drawing.Image.FromStream(ms)
' Image.Save(sfd.FileName)
Dim bm As Bitmap = New Bitmap(frmGraph.Width, frmGraph.Height)
Dim rect As Rectangle = New Rectangle(0, 0, frmGraph.Width, frmGraph.Height)
frmGraph.DrawToBitmap(bm, rect)
bm.Save(sfd.FileName, ImageFormat.Png)
End If
End Sub)
t.SetApartmentState(ApartmentState.STA)
t.Start()
t.Join()
The code I have defined above is a public sub within a private class. The code saves an image file, but the file is blank.