Как создать объект wx.Image из данных в памяти?

Я пишу приложение с графическим интерфейсом на Python, используя wxPython, и хочу отобразить изображение в статическом элементе управления (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?

Спасибо за вашу помощь!


person ChrisN    schedule 17.12.2008    source источник


Ответы (3)


Вы должны иметь возможность использовать StringIO для переноса буфера в объект файла памяти.

...
import StringIO

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

image = wx.ImageFromStream(sbuf)
...

buf можно заменить любой строкой данных.

person codelogic    schedule 17.12.2008

Поскольку в Python вы используете Duck Typing, вы можете написать свой собственный класс потока и передать экземпляр этого класса в ImageFromStream. Я думаю, вам нужно только реализовать метод чтения и заставить его возвращать ваши данные.

person PEZ    schedule 17.12.2008

Если вы используете python3.x, вы должны использовать «ByteIO» и «ImageFromStream» для отображения данных изображения из памяти. Внимание, формат параметра "BytesIO" должен быть b"\xff\xd8". Ниже приведена картинка, показывающая код: формат параметра BytesIO

person ranaRao    schedule 05.06.2018