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