svofski напомнил про LFSRного мандрила, и я подумал, что надо бы полнее раскрыть потенциал - даешь 16 цветов!
Два варианта:
bab16pix - медленный (10 секунд) пиксельный (можно немного быстрее, но я подумал, что лучше сохранить читаемость исходника)
bab16byt - быстрый (менее секунды) байтовый
Чтобы все уместилось в памяти уменьшил ширину картинки до 248 точек. Конверсия картинки оптимизирована для палитры emu. Надеюсь авторы и пользователи других эмуляторов меня простят, тем более можно сделать альтернативную конверсию или взять другую картинку. Еще можно упаковать и сделать rom. zx0 сжимает до 24 килобайт, rip до 23.5 (это без распаковщиков).
svofski(08.09.2022)
Полноцветные картинки на Векторе это приятно. То, что нет памяти под полную картинку -- это вот Вектор такой Вектор..
C дизером вряд ли много можно выгадать, пытаясь паковать слои по отдельности. Я так думаю, что zx0 тут чего-то вытягивает в основном благодаря насыщенной красноте носа.
Как тебе такая идея для байтового варианта: упаковать картинку не плашмя, а выбирая байты "по маршруту" LFSR. Распаковывать ее прямо на экран с тем же LFSR-ом. И эффект получится и место останется для чего-нибудь еще красивого.
- - - Добавлено - - -
Кстати как насчет ordered dither-а? Он не будет лучше zx0-иться?
Больше игр нет
Как вариант можно распаковать на квазидиск и рисовать от туда.
Можно, но такое сжатие будет неэффективным, один байт в одном конце экрана, другой - в другом и между ними 0 корреляции.
Опять же, когда байты рядом, ordered должен быть лучше, а когда далеко - уже не уверен.
Есть компромисс - LFSRить и упаковать по блокам, типа как ты сделал недавно, только лучше квадратные сравнительно небольшие.
Меня нехватка 8 точек в ширину не сильно напрягает, это разве что в деме для голого вектора можно было бы попробовать удивить зрителей.
Да вот в случае рассеяной ошибки корреляция тоже только у нас в глазах. В Базыре хорошо видно -- нос и щеки еще туда-сюда, а так вообще там мало регулярности. Ну и картинки бывают разные, не все они про мандриллов. Не попробуешь - не узнаешь.
Нехватка 8 точек в ширину по-моему ничего страшного. Но если будет еще память, можно чего-нибудь добавить. Музон и все такое.
zx0ябельность разных дизеров все равно было бы интересно проверить, без LFSR-а тоже. У меня не хватает инструментария. Надизерить я могу, а разбить по плоскостям итд чтобы именно сравнить с твоим способом это запара.
А вот еще идея №2:
завернуть картинку с прогрессивной детализацией. Первый уровень 32х32, потом 64х64 (на каждый квадратик +3 субквадратика), потом 128х128, потом 256х256. Картинку надо заворачивать по пикселям. Кстати по пикселям корреляция может быть местами получше, чем по байтам. Будет медленно, но мы же любим смотреть, как компьютеру тяжело.
Больше игр нет
Долго тупил, не мог понять как у тебя получается такой непонятный размер файла. Потом дошло, что ты просто отрезал один столбец одного слоя. Допилил немного свои скрипты до еще одного формата и пошло-поехало..
Оказывается найти упорядоченную (порядочную!) дизерилку не так-то просто. Я надеялся на ImageMagick, но там чего-то всё совсем не то. Нашел вот такую:
https://seansleblanc.itch.io/ordered-dither-maker
Очень стильно выходит диагональный дизер: presets -> diagonals, steps 3 или 4, pixel scale 1.
Попробовал много разного
http://sensi.org/~svo/b/mandrill/dithers.zip
(Мандрила тоже пробовал, но он и так мандрил, кто его не видел).
Арзак единственный в этой коллекции с обычным Флойдом-Стейнбергом, но это потому что у него ручная штриховка.
Что до сжатия, жмется чуть чуть получше рассеянного дизера, зависит от картинки разумеется.
Больше игр нет
Э, ну тут мне даже как-то неловко. Широкоизвестная вещь. https://ru.wikipedia.org/wiki/%D0%A4...BB%D1%88%D0%B0
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)