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






Поскольку в Python вы используете Duck Typing, вы можете написать свой собственный класс потока и передать экземпляр этого класса ImageFromStream. Я думаю, вам нужно только реализовать метод чтения и заставить его возвращать ваши данные.
Вы должны иметь возможность использовать StringIO, чтобы обернуть буфер в объект файла памяти.
...
import StringIO
buf = open("test.jpg", "rb").read()
# buf = get_image_data()
sbuf = StringIO.StringIO(buf)
image = wx.ImageFromStream(sbuf)
...
buf можно заменить любой строкой данных.
Если вы используете python3.x, вы должны использовать «ByteIO» и «ImageFromStream» для отображения данных изображения из памяти. Внимание, формат параметра "BytesIO" должен быть b "\ xff \ xd8" На следующем рисунке показан код: формат параметра BytesIO