【问题标题】:Why do I get an error when saving image of a form to file in VB.Net?为什么在 VB.Net 中将表单图像保存到文件时出现错误?
【发布时间】:2021-07-14 20:33:36
【问题描述】:

我需要将应用程序表单的图像保存为图片文件,例如 jpeg、bmp 或 png 等。

互联网上的许多来源都给出了这个或类似的代码示例来捕获表单的图像:

Private Function TakeScreenShot(ByVal Control As Control) As Bitmap
    Dim tmpImg As New Bitmap(Control.Width, Control.Height)
    Using g As Graphics = Graphics.FromImage(tmpImg)
        g.CopyFromScreen(Control.PointToScreen(New Point(0, 0)), New Point(0, 0), New Size(Control.Width, Control.Height))
    End Using
    Return tmpImg
End Function

并保存该代码捕获的表单图像:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    TakeScreenShot(Me).Save("c:\My Folder\Screenshot.png", System.Drawing.Imaging.ImageFormat.Png)
End Sub

捕获表单图像的代码似乎可以工作(不会导致错误),但是将图像保存到文件的代码行会出现此错误:

“System.Runtime.InteropServices.ExternalException”类型的未处理异常发生在 >System.Drawing.dll GDI+ 中出现一般错误。

我尝试了代码的变体,但在所有情况下都是将图像保存到文件的语句

.Save("c:\My Folder\Screenshot.png", System.Drawing.Imaging.ImageFormat.Png)

总是给出异常错误。我究竟做错了什么?有什么建议吗?

【问题讨论】:

  • 运行程序的用户帐户是否对您要保存到的目录有写权限?
  • 您关于写权限的问题给了我解决问题的方法。谢谢。
  • 不客气 :) 我认为您可以接受重复的建议来关闭此问题,以帮助保持网站整洁。

标签: vb.net forms file graphics


【解决方案1】:

您正在从屏幕上获取一个矩形(在您的Form 范围内)而不是您的Form 屏幕截图。 但是,您不必直接从 tmpImage 保存(因为它尚未发布),而是从该图像的源副本中保存。 下面的代码显示了如何(一种方式):

Using final As Bitmap = New Bitmap(TakeScreenShot(Me))
    final.Save("C:\My Folder\Screenshot.png")
End Using

【讨论】:

    【解决方案2】:

    正如 Andrew 指出的,这很可能是权限问题。我这样做是为了让您可以尝试不同的位置。

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim tmpImg As Bitmap = TakeScreenShot(Me)
        Dim path As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
        path = IO.Path.Combine(path, "Screen.png")
        tmpImg.Save(path, System.Drawing.Imaging.ImageFormat.Png)
    End Sub
    

    【讨论】:

    • 我没有想到这一点。你的建议解决了这个问题,我会“赞成”它,但我在这里没有足够的地位来做到这一点。所以我只想说声谢谢,希望我不会为此惹上麻烦:-)
    • @DanielRutschman 谢谢。如果可以,标记为答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多