panama555 panama555
Я сохранил файл-png в dat-файл таким образом.
обьясните мне смысл такого преобразования? откройте в heх редакторе оба файла и посмотрите разницу.
panama555
Теперь вопрос: как в программе загрузить этот dat-файл, чтобы программа могла его использовать как png-файл,
ну вы же понимаете что ничего по сути вы не сделали, у вас на выходе вышел такой же png плюс десяток байт от пикла. Вы ведь в курсе что в PNG -формате данные сжимаються\кодируются и чтобы получить картинку нужно эти данные распаковать согласно аогоритму PNG-cжатия. Если вы сделаете pickle.loads то просто получите кучу байт. Вам нужно всервно получить обьект через BytesIO() и скормить его уже pygame.image.load-у, котороый уже преобразует сжатые данные в пикселы.
Если так уж припекло хранить все в одном файле, зачем вам вообще пикл? что мешает хранить все файлы , например в zip архиве? Читаете через zipfile(там теже яйца что и просто с ФС только в профиль, есть open, read и тд…), а в случае необходимости, добавить\удалить файлы можно практически любым архиватором.
Еще вариант именно с пайгемом, посмотрите в сторону pygame.image.fromstring()/ pygame.image.frombuffer() и pygame.image.tostring(). открываете картинку черз pygame.image.load, загоняете в словарь через pygame.image.tostring(). словарь сохраняете pikle-ом или shelve-ом(почемуто я уверен что про сжатие придеться забыть, хотя ХЗ нужно экспериментировать). Потом также их читаете и загоняете сразу в пайгейм pygame.image.fromtring-ом или pygame.image.frombuffer-ом. По крайней мере избавитесь от посредника в виде BytesIO/StringIO.