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 ответ
Оказывается, глючный триггер заставил сделать снимок экрана снова, пока открывалось полноэкранное окно, отображающее его. Я полагаю, что в этот момент есть несколько миллисекунд темноты или неопределенного состояния (в контексте функции скриншота), и библиотека достаточно быстра, чтобы уловить это.
Я не уверен, должно ли это продолжаться, потому что это в основном напоминание, чтобы проверить вещи, которые человек не может воспринимать. Не стесняйтесь удалять, если это не подходит.