【问题标题】:How to get a Windows Forms panel as a bitmap with C#?如何使用 C# 将 Windows 窗体面板作为位图获取?
【发布时间】:2010-07-05 20:06:59
【问题描述】:

我有一个带有多个控件的面​​板的 Windows 窗体。面板不会占用所有的表单空间,而只是一小部分。我想知道的是是否有某种方法可以将面板(带有所有子控件)的显示检索为位图。类似于屏幕截图,但仅裁剪到面板上。

我没有查看屏幕截图,因为面板位于可滚动控件(DevX 控件)内,因此有时它可能不完全可见,我需要它的可视化表示,无论是否可见。

这可能吗?

编辑:

嗯,现在看来,正如我所担心的那样。使用 DrawToBitmap() 的建议解决方案仅绘制可见的控件部分。我使用 DisplayRectangle 来检索完整控件的大小。矩形没问题,现在位图是整个控件的大小,但是控件不可见的部分在位图上是透明的,不显示控件不可见部分的控件。

有没有机会完全渲染出来?

【问题讨论】:

  • 见我对汉斯回答的评论。

标签: winforms bitmap panel screenshot


【解决方案1】:

当然,只需使用面板的 DrawToBitmap() 方法。它不是 100% 可靠的,面板上可能存在不支持它的控件。像 RichTextBox、WebBrowser 或某种第 3 方 ActiveX 控件。

    private static Image PanelToBitmap(Control pnl) {
        var bmp = new Bitmap(pnl.Width, pnl.Height);
        pnl.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
        return bmp;
    }

【讨论】:

  • 哦,天哪,我以前从未注意到这种方法 :( 我想没有必要...非常感谢。我希望它适用于所有使用过的控件(主要是编辑框、复选框、组等)再次感谢。
  • 对于非滚动表单,它可以完美运行。使用 Scrollable Control (DevX) 时,如我的编辑中所述。
  • 我无法想象你会如何将 100 磅的猪塞进 20 磅的戳中。
  • 控件是否应该能够绘制其项目,即使它们当前不在视野范围内?它们没有隐藏(其 Visible 设置为 false),它们在屏幕上根本不可见,因为滚动条设置在某个位置。还是我错过了您评论的重点?
  • @kornelijepetak:在创建新位图时尝试使用而不是pnl.Width/Height pnl.DisplayRectangle.Width/Height
猜你喜欢
  • 2011-02-11
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 2012-01-27
  • 1970-01-01
相关资源
最近更新 更多