如何从内存数据创建wx.Image对象?

时间:2008-12-17 19:54:46

标签: python wxpython wxwidgets

我正在使用wxPython在Python中编写GUI应用程序,我想在静态控件(wx.StaticBitmap)中显示图像。

我可以使用wx.ImageFromStream从文件加载图片,这样就可以了:

static_bitmap = wx.StaticBitmap(parent, wx.ID_ANY)
f = open("test.jpg", "rb")
image = wx.ImageFromStream(f)
bitmap = wx.BitmapFromImage(image)
static_bitmap.SetBitmap(bitmap)

但是,我真正希望能够做的是从内存中的数据创建图像。所以,如果我写

f = open("test.jpg", "rb")
data = f.read()

如何从wx.Image创建data对象?

感谢您的帮助!

3 个答案:

答案 0 :(得分:8)

您应该能够使用StringIO将缓冲区包装在内存文件对象中。

...
import StringIO

buf = open("test.jpg", "rb").read()
# buf = get_image_data()
sbuf = StringIO.StringIO(buf)

image = wx.ImageFromStream(sbuf)
...

buf可以替换为任何数据字符串。

答案 1 :(得分:0)

因为在Python中你使用Duck Typing,你可以编写自己的流类并将该类的实例交给ImageFromStream。我认为你只需要实现read方法并让它返回你的数据。

答案 2 :(得分:0)

如果你是python3.x,你应该使用“ByteIO”和“ImageFromStream”来显示内存中的图片数据。注意,“BytesIO”参数的格式应为b“\ xff \ xd8” 以下是显示代码的图片: the format of the parameter of the BytesIO