Lethargeek Kompakt - компрессор ZX-графики
Представляю опытный образец. Часть еще не допиленных возможностей отключил, потому жмёт несколько слабее новой считалки. Просьба погонять и помучать, сообщить о глюках, аномально плохо (или хорошо) пакуемых скринах, проигрышах остальным пакерам (только на вменяемых картинках, а не месиве случайном как после резета). Пользоваться из командной строки, пакеру скармливать файлы scr (атрибуты он проигнорит); соответственно депакеру - результат. Бмпшки для контроля и для наглядности.
(удолил как неактуальную)
Lethargeek Kompakt 0.(0)4
вотъ последняя нецветная версия, дальше буду с атрибутами уже делать
дольше думает, бо сперва считалка множество конфигураций перебирает
запилил еще один режим группировки (проигрыш на кэтмэне меньше стал)
и поправил упаковочную стратегию, где-то пару дюжин байт может выгрызть
плюс добавил вывод непонятной статистики))
(удолил)
Lethargeek Kompakt 0.(0)9
Вот и полностью функциональная пц-версия. Способ упаковки атрибутов по результатам тестов избран простой, вариантов действий на каждом три: повторить соседа по горизонтали или по вертикали, или загрузить новый (непосредственно или из короткого словарика самых частых). Один бит при повторе прошлого действия и два бита при несовпадении с ним (плюс возможная загрузка - несколько бит). Итого не меньше бита на атрибут, что невыгодно лишь в случае совсем простых и сильно регулярных раскрасок. Делать счетчики повторов пока не стал, и так проигрыш LC по атрибутам бывает редко, а со всей уже запиленной ерундой мне еще придётся взлетать на спектруме :)
В целом по результатам тестов 320 картинок и заставок (без ингеймов) с zxart.ee:
средний выигрыш у LC - 454 байта и 11-12% (по атрибутам - 54 байта и даже 18%)
самый крупный абсолютный выигрыш: MAC - Livingstone Supongo (877 байт)
самый крупный относительный: Chris Graham - Judge Anderson (19.5%)
средняя степень сжатия от 6912 уже почти 50% :cool:
проиграл всего в 5 картинках из этих 320 (и еще в 7 меньше сотни байтиков выиграл):
CatMan - catmans gallery4 (-93 байта) -- отражения по вертикали (орнамент рамки)
A-Graph - 3.5FLOP (-102 байта) -- множество скрытых повторений, простая раскраска
Rindex - Сетка 3 (-117 байт) -- множество регулярных повторений (в раскраске тоже)
Lizard, Slider - Alien Syndrome (-143 байта) -- имитация комодурского лоуреза
(просто не предусмотрел подобного извращения, не подумал как-то)))
Shiru - City Storm 1k gfx (-268 байт) -- монохромная диффузная конверсия
что интересно, в целом по диффузным картинкам результаты непредсказуемы
прогнал несколько сконверченных фотографий - хуже или лучше, как повезёт
в принципе понятно, что делать с ними - например, несколько префиксных кодов
ведь во многих клетках только 2-3 вида (в смысле усреднённой "яркости") чанков
также многим спектрумовским картинкам (и тому же лоурезу) не повредило бы
как-нибудь потом допилю, или уже с новым форматом только...
по ингеймовым картинкам средний выигрыш только 8-9% и чаще проигрыши
в них больше регулярности в раскраске и длинных повторяющихся полосок
да и в целом упакованный размер поменьше, и меньше разница
правда, я пока ингеймов смотрел немного
(del/45)
о проделанной работе отчёта псто
Дошли руки наконец позаниматься zx-депакером. Пока сделал для проверки имитацию распаковщика монохромных мотоциклов (3194 байта без заголовка). Даже без атрибутной части размер вышел нефиговый, под 300 байт (но я уже наметил, как на 30-40 байт сократить). Время распаковки ~60 фреймов.