Когда-то я добавил поддержку "стандартного экрана спектрума" (6912 байт) в свой вьювер. Но недавно обнаружил, что на самом деле существует гораздо больше различных форматов. Согласно статье http://hype.retroscene.org/blog/graphics/320.html я узнал о новых для себя форматах: multicolor 8x4/8x2/8x1; standard + border; multicolor 8x4 + border; attributes (53c).
С помощью метода "научного тыка" я сделал частичную (пока не реализован бордюр) поддержку этих форматов.
Но есть несколько вопросов:
- Тип формата определяю по размеру файла. Есть ли иной способ определить формат?
- В некоторых изображениях одного формата битовая область идет линейно, а в некоторых как в оригинальном спектруме. Как это отличить я не придумал.
- С форматом Multicolor 8x4 + Border не разобрался.
- Где можно почитать спецификации этих форматов, что бы сделать все по уму?
Скриншот вьювера под Linux с загруженным PNG и информацией о выделенной области изображения:
Вьювер написан для Linux и macOS. Для создания окна использует glfw3. Для загрузки некоторых форматов используются сторонние библиотеки (libpng, giflib, libtiff, libjpeg), для остальных свои собственные велосипеды (PSD, AGE, DDS, ICO, PPM, XWD, XPM, TARGA). Исходный код находится тут:
https://bitbucket.org/andreyu/simple-viewer-gl
Версия 2.75:
- Добавлена поддержка формата XPM (собственная реализация).
- Убрана зависимость от библиотеки libconfig++ в пользу ini-подобного конфига.
- Улучшена поддержка форматов DDS, ICO и XWD.
- Добавлена поддержка формана TARGA (собственная реализация).
- Обновлена палитра ZX-Spectrum (теперь это PULSAR, как на "железном" ZX).
- Добавлена возможность сохранять зум (переключается по хоткею <shift>+<s>).
- Исправлена ошибка с фильтрацией текстур.
- Улучшено сканирование директории, поддержка drag-n-drop списка файлов.
Клонирование репозитория (для новых пользователей):
Обновление до последней версии:Код:$ git clone https://bitbucket.org/andreyu/simple-viewer-gl.git $ cd simple-viewer-gl $ make release
Код:$ cd simple-viewer-gl $ git checkout master $ git pull $ make clean $ make release