4

我正在使用 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

谢谢你的帮助!

4

3 回答 3

9

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

...
import StringIO

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

image = wx.ImageFromStream(sbuf)
...

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

于 2008-12-17T20:08:11.900 回答
0

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

于 2008-12-17T20:01:11.820 回答
0

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

于 2018-06-05T09:31:43.203 回答