PIL -> преобразование изображения PyGame: частичная потеря данных

Я использую концепцию скриншотов на основе C из ответа JHolta в " Сделай скриншот через скрипт на python". [Linux], чтобы генерировать скриншоты, которые я хотел бы отобразить в PyGame. С некоторыми незначительными изменениями extern "C" к функциям и импортированию Xutil вместо Xlib) предоставленный код работает на удивление хорошо. Короче говоря, он использует Image.frombuffer в байтовом массиве, возвращаемом библиотекой C. С show() Изображение и все, что с ним происходит, отображается в ImageMagick.

Однако, если я преобразую его в Python 3 Python 3 согласно PIL и pygame.image, я получу только черную поверхность. Это не простая проблема: если я нарисую изображение перед тем, как преобразовать его в изображение PyGame (как в OP последней ссылки), оно будет отображаться на черном фоне при блике результата. Более того, print байт объектов из PILImage.tobytes а также pygame.image.tostring показывает, что они оба содержат данные и их len идентичен

Что я здесь не так делаю? Я с радостью предоставлю код, если это необходимо, но я думаю, что это скорее концептуальный вопрос, и я не особо изменил фрагменты этих ответов.

(Аналогичная проблема в Python 2, кстати, но там PyGame использует str вместо byte за tostring / fromstring и печать tostring появляется для получения пустой строки.)

1 ответ

Оказывается, глючный триггер заставил сделать снимок экрана снова, пока открывалось полноэкранное окно, отображающее его. Я полагаю, что в этот момент есть несколько миллисекунд темноты или неопределенного состояния (в контексте функции скриншота), и библиотека достаточно быстра, чтобы уловить это.

Я не уверен, должно ли это продолжаться, потому что это в основном напоминание, чтобы проверить вещи, которые человек не может воспринимать. Не стесняйтесь удалять, если это не подходит.

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