【问题标题】:Saving wx widget contents to a file将 wx 小部件内容保存到文件
【发布时间】:2009-12-09 17:33:03
【问题描述】:

我在我的程序中使用 BufferedPaintDC on event 创建了不同的形状,如圆形/矩形等。现在我想在单击菜单选项中的另存为按钮时保存文件。为此,我使用 memoryDC 并将内容保存为 bmp 文件。

def Saveas(self,event):

    dlg = wx.FileDialog(self, "Choose a file", self.dirname, "", "*.*", \
    wx.SAVE | wx.OVERWRITE_PROMPT)
    if dlg.ShowModal() == wx.ID_OK:   # user enters filename as something.bmp
     self.show_bmp = wx.StaticBitmap(self)

     w, h = self.GetClientSize()

     draw_bmp = wx.EmptyBitmap(w, h)

     c = wx.MemoryDC(draw_bmp)

     c.SetBrush(wx.Brush('white'))

     c.Clear()

     c.SetPen(wx.Pen("purple", 15))

     c.DrawRectangle(30,30,60,60)   ### ??????####

     myimage = self.show_bmp.GetBitmap()
     self.filename=dlg.GetFilename()
     name = os.path.join('C:\mad', self.filename)
     myimage.SaveFile(name, wx.BITMAP_TYPE_JPEG)
     self.filename=name
    dlg.Destroy()

现在我的问题是如何让缓冲的 dc 在“c”上绘制的东西,然后将它们转换为图像?我希望我的问题很清楚。如您所见,我正在“c”上绘制矩形,并且正在转换为图像。但我想获得在 ONPaint 上创建的形状。如何提取它?

谢谢

【问题讨论】:

    标签: python wxpython wxwidgets


    【解决方案1】:

    您的要求非常接近于您要截屏。尽管从技术上讲,获取窗口当前外观的副本与克隆 OnPaint 所做的不同,但它可能会为您完成这项工作。

    如果它不起作用,请记下该技术,包括使用 DC.Blit(),因为这些将是您将使用的工具。

    请参阅此wxpython-users mailing list post by Andrea Gavana 获取图像抓取代码。

    编辑:如果问题是因为您正在 EVT_PAINT 处理程序中进行所有绘图,那么您可能需要一种不同的技术。绘制从不同例程到预先分配的缓冲区位图的所有内容。在 OnPaint 内部,这正是图像实际到达屏幕的方式,您无需绘制,只需复制已绘制的位图。缓冲区位图在 OnPaint 调用之间保持不变(实际上基本上独立于 OnPaint),因此您可以添加一个 Save() 例程,该例程也很简单。请参阅wxPyWiki DoubleBuffererDrawing 页面以了解各种 sn-ps,它们将向您展示如何做到这一点。 (另请注意,这将是一个学习曲线,如果还不够,请寻求更多帮助。)

    【讨论】:

    • 嗯,是的,我想要的是“克隆”,就像你说的那样……这样我以后可以修改保存的文件……但是如果我截屏的话,那将是不可能的……跨度>
    • 为什么不呢?您可以再次加载它......或者不保存它......将它保存在内存中。这只是数据。我不明白你对两者的区别。
    • 好的。顺便说一句,在您确信它确实对您有用之前,您无需接受答案。不过,如果您认为任何“有帮助”的建议都投赞成票是很好的,请记住,如果您认为这是愚蠢的建议,您可以随时回来再次投反对票。 :)
    • 哈哈 :D 是的..顺便说一句,我确实实现了它,它完美地适用于 screenDC.. 但是我使用我创建的缓冲 dc 而不是它仍然存在一个问题,它显示空白图像不管它是什么。有什么建议吗??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2018-05-11
    • 1970-01-01
    相关资源
    最近更新 更多