2016-11-17 1 views
0

Я пытаюсь понять основы, стоящие за Pixbuf и его заводскими методами new_from_data и new_from_stream.GdkPixbuf может быть создан с помощью `new_from_data` и` new_from_stream`. Почему последние не требуют разрешения?

new_from_data требует строку байтов, содержащих данные изображения, и другую информацию, такую ​​как бит на выборку, с и высотой изображения.

Я не понимаю, почему new_from_stream не требует дополнительной информации об изображении. Затем, как может Pixbuf знать, как сделать изображение new_from_stream не предоставляет никакой дополнительной информации, кроме Gio.InputStream?

ответ

1

new_from_stream() рассчитывает получить поток поддерживаемого файла изображения, эквивалентный new_from_file(). Все форматы изображений содержат метаданные, такие как высота и ширина.

new_from_data(), с другой стороны, ожидает буфер пикселя, который по существу представляет собой массив пикселей без каких-либо метаданных.

+0

Благодарим за ответ. Мне было интересно: возможно ли (и эффективно) поддерживать pixbuf и изменять данные (данные аналогичны данным, предоставленным 'new_from_data')? Это связано с тем, что я опасаюсь, что 'new_from_stream' будет менее быстрым, так как ему нужно проанализировать формат изображения, следовательно, может оказаться непригодным для отображения видеороликов, созданных« на лету ». – fstab

+0

Если вам нужно как-то слегка нажимать на картинку (например, каждый цикл розыгрыша), то изменение данных определенно звучит как _lot_ лучше, чем создание нового pixbuf каждый раз: выделение памяти занимает некоторое время ... Может быть, 'get_pixels()' для вас полезен , – jku

+0

не является «байтовым» объектом (возвращаемым 'get_pixels()') неизменяемым в python? – fstab

Смежные вопросы