如何将表单保存到vb.net中的图像文件?

时间:2019-09-10 20:00:43

标签: javascript vb.net forms winforms cefsharp

如何在不截屏的情况下将当前表单保存到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.

0 个答案:

没有答案