【问题标题】:Saving wxPanel to Image将 wxPanel 保存到图像
【发布时间】:2013-07-09 23:08:26
【问题描述】:

我正在寻找一种从本质上截取整个 wxPanel 并将其保存为 PNG 的方法。关键是,没有屏幕。我需要能够“绘制”面板并在没有实际屏幕的情况下保存绘制的面板。我正在使用 Python 2.7,在 Ubuntu 12.04 上运行。

这可能吗?

【问题讨论】:

    标签: python python-2.7 wxpython wxwidgets image-capture


    【解决方案1】:

    如果根本没有屏幕,即没有 X11 显示器,那么您甚至无法启动图形化 wxWidgets 程序,所以我不确定您希望它如何工作。

    如果您可以启动程序,那么您还可以使用wxClientDC 来捕获任何窗口的内容:使用其Blit() 方法将其内容复制到wxMemoryDC 中,您可以在其中选择位图最终会得到您窗口的图像。

    【讨论】:

    • 我正在使用屏幕进行尝试,只是为了让图像捕获正常工作。这是我在面板 init 中的内容:sizer = wx.BoxSizer(wx.VERTICAL)text = wx.StaticText(self, -1, "Heeeeeeerrreeeeee's a Panel!")sizer.Add(text, 1, wx.EXPAND | wx.ALL, 10)self.SetSizer(sizer)bitMap = wx.EmptyBitmap(500,500)memDCwx.MemoryDC(bitMap)clientDC = wx.ClientDC(self)clientDC.Blit(0,0,500,500,memDC,0,0)bitMap.SaveFile(fileName, wx.BITMAP_TYPE_PNG)我的图像最终为一个 500 X 500 的黑匣子。
    【解决方案2】:

    我在这里写了一篇关于如何做这类事情的教程:

    但是,正如有人已经指出的那样,如果 X(或类似的)不可用,那么您将无法生成任何类型的 GUI。或者您的意思是无头盒子(即没有显示器)而不是没有屏幕?

    【讨论】:

    • 它在 UBUNTU 12.04 上运行,GRUB_CMDLINE_LINUX_DEFAULT 设置为“text”,我认为这意味着 X 没有运行。我们已经用基于 wx 的 floatCanvas 成功地做类似的事情,所以我希望这会奏效。感谢您的链接,这正是我一直在寻找的!
    • @VZ。你们是对的。如果没有 X 运行,这是不可能的。 floatCanvas 的做法是将每个像素绘制到 memoryDC,然后在绘制完成后将其 blit 到 clientDC。这样,是否有屏幕都没有关系。 wxApp 确实可以运行,尽管没有 X 运行,但仍会创建框架和面板。有趣的。感谢您抽出宝贵时间提供帮助。
    【解决方案3】:

    我找到了窍门,瞧,它的名字是 VFB:http://linux.die.net/man/1/xvfb

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多