将窗体另存为无边框图像
Posted
技术标签:
【中文标题】将窗体另存为无边框图像【英文标题】:Save windows form as image without borders 【发布时间】:2021-05-17 20:06:05 【问题描述】:我目前正在尝试将 Windows 窗体另存为图像,并且我已经能够使用以下代码:
Dim frm = Me
Using bmp = New Bitmap(frm.Width, frm.Height)
frm.DrawToBitmap(bmp, New Rectangle(0, 0, bmp.Width, bmp.Height))
bmp.Save("D:\programs\files\image.png")
End Using
但是,图像包含表单的边框。 有没有什么办法可以保存图片没有边框?
【问题讨论】:
拿这个:How to print hidden and visible content of a Container with ScrollBars,传递你的 Form 实例。阅读说明(以及与框架版本相关的说明)。 作为替代方案,您也可以试试这个:How can I make a screen shot of a window behind my form?。即使它被另一个隐藏(完全或部分),这也可以打印一个窗口。仅限全帧或 ClientArea。阅读笔记:) 【参考方案1】:你能不能把图片前面的边框样式改成none,然后保存图片后再加回来...类似...
Dim frm = Me
frm.FormBorderStyle = FormBorderStyle.None
Using bmp = New Bitmap(frm.Width, frm.Height)
frm.DrawToBitmap(bmp, New Rectangle(0, 0, bmp.Width, bmp.Height))
bmp.Save("D:\programs\files\image.png")
End Using
frm.FormBorderStyle = FormBorderStyle.FixedSingle
【讨论】:
您也可以执行以下操作:dim rect = RectangleToScreen(ClientRectangle) rect.Offset(-Left, -Top)
,将表单的边界绘制到位图,然后 Clone() 您想要的部分:bmp = bmp.Clone(rect, PixelFormat.Format32bppArgb)
。现在 Bitmap 只代表 ClientRectangle 的内容。 -- 请注意,如文档中所述,Control.DrawToBitmap()
不会绘制某些控件的内容,因为 RichTextBox 和嵌套容器的内容以相反的顺序呈现。这就是我在评论中发布这些方法的原因:)
@Jimi ...我相信你是对的;我没有使用不同的控件对此进行测试。这只是我想到的第一件事。以上是关于将窗体另存为无边框图像的主要内容,如果未能解决你的问题,请参考以下文章
要使一个textbox显示的像无边框的label,要怎样写css