将窗体另存为无边框图像

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 ...我相信你是对的;我没有使用不同的控件对此进行测试。这只是我想到的第一件事。

以上是关于将窗体另存为无边框图像的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 无边框图像按钮

要使一个textbox显示的像无边框的label,要怎样写css

使用 VBA 将表单另存为报表

JavaScript 将元素另存为图像或 Extjs 4.x 另存为图像

如何保存不另存为

解决LaTex中插入Visio画图有多余边框的问题