Lord_Prizrak
Янв. 27, 2011 09:59:50
Здравствуйте.
Начал понемного ковыряться с PyGame и возникла такая проблема… Получаю изображение в raw, читаю его с помошью PIL, а затем передаю в PyGame через буфер. В итоге вместо изображения простое черноe пятно. Eсли сохраняю из PIL в PCX и открываю PyGAME то всё нормально. И нагуглить, что-то не удаётся.
Вот кусок кода:
im = Image.frombuffer('RGB', (width, height), imga, 'raw', 'P', 0, 1)
im.putpalette(imga_palet)
im.save("./tmp/123.pcx", "pcx")
buff = im.tostring()
surf1 = pygame.image.fromstring(buff, im.size, im.mode)
Lord_Prizrak
Янв. 28, 2011 03:59:31
Выяснилась новая вещь. Так странно обрабатываются только эти изображения. Если с помошью PIL открываю любую другую картинку и передаю её через буффер в PyGame то всё нормально. А нужная мне картинка через буфер не передаётся. Хотя с диска PyGame её читает нормально. Можно конечно всё, что мне нужно получать PILом, сохранять на диск в темпы куда-нить, а потом открывать с помощью PyGame, но мне такой подход ну не как не нравится.
Андрей Светлов
Янв. 28, 2011 07:36:47
Вы пишете в форум, желая поговорить сами с собой?
igor.kaist
Янв. 28, 2011 08:00:29
Lord_Prizrak
Так странно обрабатываются только эти изображения.
а что представляют их себя изображения? RGB, RGBA?
Андрей Светлов
Янв. 28, 2011 08:55:30
igor.kaist
Палитровый режим, очевидно. При этом автор не желает показать, на каких данных у него этот код не работает.
Как получались картинка и палитра, верно ли они составлены - тоже неясно.
Зачем в pygame использовать палитру?
И отчего ее не устанавливать для получившейся поверхности?
Видишь, сколько вопросов?
И на них всего пять неверифицируемых строчек кода.
Lord_Prizrak
Янв. 28, 2011 15:51:52
Картинки брались из ресурсников игры Heroes III: SoD. Расширение у файлов .pcx, но ими они не являются. Впринципе первой строчкой моего кода они как раз и читались из буфера куда их положил код потрошения .lod-а, и читалось правильно. Что там за формат, толком не понял (о формате “P” первый раз слышу).
С проблемой тоже справился, надо было всего-лишь вызвать im = im.convert(“RGB”) для превращения картинки из некоего формата “Р”, в обычный “RGB”. После этой операции всё прекрасно заработало.
Прошу прощения, просто первый раз в жизни вопрос на форуме задаю, до этого гугль всегда помогал (впринципе и в этот раз тоже), или документация…