将表单保存为图片(屏幕截图)

4

我有两个表格。

  • 表格1包含我需要截图的内容
  • 表格2包含绘图(这个表格总是在最上面,但是透明)。

我需要截取第一个表格的屏幕截图,而不使其置于表格2的上方,也不包括表格2的内容。

以下是我正在处理的内容,我正在尝试修复它。

Private Function TakeScreenShot(ByVal Control As Control) As Bitmap
    Dim Screenshot As New Bitmap(Control.Width, Control.Height)
    Control.DrawToBitmap(Screenshot, New Rectangle(0, 0, Control.Width, Control.Height))
    Return Screenshot
End Function

该函数不能正常工作,因为Control.drawtoBitmap没有设置IMG的值。

IMG是空白的,并返回一个纯白色的图像。

调用该函数的方式如下:

TakeScreenShot(form1.webbrowser1).Save("c:\Screenshot.png", 
     System.Drawing.Imaging.ImageFormat.Png)

非常感谢您的帮助。

1个回答

14

请用以下代码替换您的TakeScreenShot函数:

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

这应该可以工作,但是如果因某些原因无法正常工作,则问题可能是在顶部的透明表单上。

您可以以完全相同的方式调用它。

祝你好运 :)


如果您想捕获窗口的全部内容而不仅仅是客户端部分,只需将g.CopyFromScreen指令更改为以下方式-> g.CopyFromScreen(Control.Location.X,Control.Location.Y,0,0,Control.Size,CopyPixelOperation.SourceCopy)。 - Fil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接