Как мне создать объект wx.Image из данных в памяти? - PullRequest
4 голосов
/ 17 декабря 2008

Я пишу приложение с графическим интерфейсом на 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?

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

Ответы [ 3 ]

8 голосов
/ 17 декабря 2008

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

...
import StringIO

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

image = wx.ImageFromStream(sbuf)
...

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

0 голосов
/ 05 июня 2018

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

0 голосов
/ 17 декабря 2008

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

...