将表单另存为图像(屏幕截图)

Posted

技术标签:

【中文标题】将表单另存为图像(屏幕截图)【英文标题】:Save form as image (screenshot) 【发布时间】:2014-05-05 18:37:53 【问题描述】:

我有 2 个表格。

Form 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 为空白并以纯白色图像返回。

这个函数的调用是this

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

我们将不胜感激。

【问题讨论】:

【参考方案1】:

用这个替换你的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.CopyFormScreen 指令 -> g.CopyFromScreen(Control.Location.X, Control.Location .Y, 0, 0, Control.Size, CopyPixelOperation.SourceCopy)

以上是关于将表单另存为图像(屏幕截图)的主要内容,如果未能解决你的问题,请参考以下文章

生成 div 的图像并另存为

在 Silverlight 3 中截取当前用户控件或任何 GUI 的屏幕截图

GUI设计:合并“保存”和“另存为”

如何为图像创建另存为按钮

电脑怎么全屏截图

将 HTML 表格另存为图像