Молодость моя (начало 90-х) прошла с компьютером ZX-spectrum (уже не помню название клона),
причем с переделанным цветным телевизором Юность Ц-401 в качестве монитора.
Ностальгия по тем временам до сих пор не дает покоя.
Так как по работе иногда приходится иметь дело с видеографикой,
а так же в качестве хобби занимаюсь разработкой FPGA процессоров и
компьютеров на них, постоянно сталкиваюсь с проблемой нехватки графический ресурсов.
Экспериментировал с разными форматами представления изображения,
занимался аппаратными кодеками и векторными сопроцессорами.
На плате с FPGA, помимо своих проектов компьютеров, зашиваю и HDL клоны ZX спетрумов.
На форуме часто вижу предложения по улучшению графики существующих игр на спектруме.
Экспериментируя с разными принципами сжатия изображения обнаружил один очень подходящий
способ улучшить изображение спектрума. Суть в следующем.
Растр 256 х 192 элементов изображения с одним битом на элемент сохраняется,
а атрибуты знакомест меняются на атрибуты блоков. Знакоместо 8х8 делится на четыре
блока 4х4. Атрибуты блока представляются четырьмя байтами (2 байта на INK и 2 байта на PAPER)
в формате RGB565. Формат можно изменить на RGB555 зарезервировав один бит на прозрачность.
Таким образом объем растра сохранился (0х1800), а объем атрибутов вместо 0х300 стал 0х3000.
Для непрерывности загрузки экрана я поставил область новых атрибутов в начало перед растром.
Размер всего изображения стал 0х4800, где первые 0х3000 - область атрибутов блоков,
а последующие 0х1800 - область растра. В FPGA версиях ZX спектрума изображение нужно загружать
с адреса 0х1000, чтобы VGA контроллер работал по адресам 0х1000...0х5800. ROM по адресам
0х0000...0х4000 используется процессором только по чтению. Можно ли новый формат реализовать в
"железных" клонах - не знаю. Но в видеокартах наверное можно. В эмуляторах - тоже.
При таком формате изображения конфликт атрибутов уменьшается, хотя не исчезает полностью.
Зато количество цветов становится 64К для INK и 64К для PAPER при RGB565.
HDL контроллер VGA на новый формат пока не сделал, чтобы проверить реально. Но написал
конверторы на Си (в Widows) для преобразования картинок RGB888 в новый формат и обратно.
Как причешу - выложу. По образованию я радиотехник, а не программист.
Пока использую расширение файлов нового формата <>.scn. Может надо как-то по другому?
Не знаю нужна ли шапка у файла нового формата для указания информации об изображении.
Вот несколько примеров преобразования (слева оригинал RGB888, справа обратное преобразование в RGB888):
Выкладываю программу для Windows (Visual Studio) с преобразованиями из BMP24 в SCN и обратно.
https://cloud.mail.ru/public/6Lt6/6reBxdpCv
https://cloud.mail.ru/public/79DU/LAzM1EScC
P.S. На авторские права не претендую.
Данный формат можно использовать где угодно и кем угодно.