【问题标题】:DrawToBitmap returns black Image from UserControlDrawToBitmap 从 UserControl 返回黑色图像
【发布时间】:2015-09-12 03:45:36
【问题描述】:

我的第一篇文章就到这里了,

我有一个包含大约 30 个控件(标签、文本框等)的 UserControl。 现在我想做一个“截图”。 所以我使用了 UserControl 中的“DrawToBitmap”方法。

这里有一些示例代码

//this is the UserControl with the about 30 controls    
var sampleusercontrol = new SampleUserControl();

var bmp = new Bitmap(sampleusercontrol.Width, sampleusercontrol.Height);
sampleusercontrol.DrawToBitmap(bmp, sampleusercontrol.Bounds);

如果我运行此代码,它会一直返回给我一个黑色图像。 我不知道为什么。请帮忙!

编辑:

忘了说UserControl是WinForms UserControl

【问题讨论】:

  • 我也遇到了同样的问题。对我来说,解决方案是在创建位图之前执行 - sampleusercontrol.Arrange(0, 0, sampleusercontrol.Width, sampleusercontrol.height)。我不知道为什么会这样,但它确实......
  • DrawToBitmap 只需发送WM_PRINT 消息。 Arrange 是 wpf 函数,为什么不是 do it in the right way
  • 抱歉我忘了说我说的usercontrol,是一个winforms usercontrol
  • Bounds 只是错误的矩形,请改用 sampleusercontrol.DisplayRectangle。
  • 添加到 Hans 的评论中:Bounds 位于控件的 Location 处,因此除非它位于屏幕原点,否则您将错过大部分或全部图像。根据控件是否滚动,您可以为可见部分选择ClientRectangle,或为包括不可见部分在内的全部内容选择DisplayRectangle

标签: c# winforms user-controls controls drawtobitmap


【解决方案1】:

这多年来一直为我工作,直到上周它开始在生产中返回黑色图像。有趣的是,就在我们应用了新的 Windows 补丁之后。我能够找到有关此问题的帖子:

KB3057839 Has Broken Windows Forms Control.DrawToBitmap() When Called from Application Launched From Windows Service

您没有提到该 winforms 控件是如何创建的,但在第一种情况下,它来自服务启动的 winforms 应用程序。 Telerik 网站上还有一个案例,该控件由 IIS 在服务器端实例化以创建 PDF 文件:

http://www.telerik.com/forums/export-to-pdf-597e04c01b39

尝试检查补丁 KB3057839 并将其回滚以进行短期修复。希望 Microsoft 将在未来提供修复或解决方法。

【讨论】:

  • Windows KB3057839 更新破坏了许多软件,包括 Putty、Telerik、GE 软件、Quicken 2015 以及我未提及的其他各种软件。
  • 我能够确认新补丁 KB3070102 覆盖了之前的补丁并修复了这个问题。
【解决方案2】:

我有同样的问题。最新一轮的 ms 补丁修正了该问题。

【讨论】:

    【解决方案3】:

    检查控件是否已加载。

    我一直在努力解决这个问题,但结果发现控件位于另一个选项卡中,并且在我单击选项卡之前无法正确显示,然后运行 ​​DrawToBitmap

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 2019-06-21
      • 1970-01-01
      相关资源
      最近更新 更多