Как создать объект 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?

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
0
4 686
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Поскольку в 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

Другие вопросы по теме