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

Javascript 如何在vb.net中将表单保存到图像文件?,javascript,vb.net,forms,winforms,cefsharp,Javascript,Vb.net,Forms,Winforms,Cefsharp,如何将当前表单保存到vb.net中的图像而不截图。我希望用户可以选择使用“保存文件”对话框来选择他们的文件名,如果有必要,我会选择截图,但我不希望这样做 到目前为止,我正在WinForms中使用CefSharp,并将一个私有类传递到程序的javascript/html端。当用户单击html按钮保存图像时,这将调用前面提到的类中的方法,该类将打开一个保存文件对话框来绘制图像 我尝试过包括截图在内的方法,但由于明显的原因,我不能使用“保存文件”对话框,因为它隐藏了我试图拍摄的帧。也许有一个工作是我没

如何将当前表单保存到vb.net中的图像而不截图。我希望用户可以选择使用“保存文件”对话框来选择他们的文件名,如果有必要,我会选择截图,但我不希望这样做

到目前为止,我正在WinForms中使用CefSharp,并将一个私有类传递到程序的javascript/html端。当用户单击html按钮保存图像时,这将调用前面提到的类中的方法,该类将打开一个保存文件对话框来绘制图像

我尝试过包括截图在内的方法,但由于明显的原因,我不能使用“保存文件”对话框,因为它隐藏了我试图拍摄的帧。也许有一个工作是我没有看到的

我尝试过其他方法,包括创建图形对象,但它们总是返回空白图像。我在某处看到一篇帖子说不要使用CreateGraphics()函数,而是使用图片框事件。我不知道如何正确地从私有类调用当前表单中存在的图片框(传递给javascript的类与表单的vb代码在同一个.vb文件中定义为私有类)


为什么所有的标签;我看到的唯一代码是
vb.net
。。。您很可能需要使用
user32
来调用函数
GetActiveWindow
。对话框应该在UI线程上打开,而不是在单独的线程上打开。使用以前工作过的BitBlt,请参见示例,或者启用远程调试并使用Puppeter。我通常使用api GetWindowRect获取myForm句柄的矩形,然后从矩形计算宽度和高度以分配bmp,最后我拍摄了以下图片:myGraphics=Graphics.FromImage(bmp):myGraphics.CopyFromScreen(myRect.Left+7,myRect.Top,0,0,bmp.Size)。然后我可以将bmp保存到我的文件中。如果没有api getwindowrect,我直接转到:使用我设置位图。宽度,我。高度,从位图的图像设置图形:并通过图形执行CopyFromScreen(我。Left+7,我。Top,0,0,bmp.Size)
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.