evd1ser
@evd1ser
fullstac разработчик знаю много умею чуть меньше))

Что это за метод сжатия?

Всем привет, нашел игру Марио для веба, при попытках изменить что-нибудь не получилось менять изображения выяснил что они зашифрованы очень странным способом: https://github.com/planktonfun/mariophpjava-demo/b...
5c5c3890a39f7551229886.png
с первой частью разобрался - это цвета из палитры, а вот что делать с x022,1111x010,x18,x07,x110 не понятненько
это все разбирается и приводиться к виду Uint8ClampedArray.

Вопрос в том как с этим работать, ведь по факту это растровое изображение как то закодированное?
Как можно изменить изображение в чем то удобном и потом вернуть к виду цифр и x?
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
p[...] - это номера цветов из общей палитры, индексы от 0 до 3.
Дальше идут сами цвета точек.
Цифра 0..3 - индекс цвета в палитре спрайта
x - начало повторений. Сразу после него идет цифра индекса цвета, дальше до запятой - количество повторений (x011, - повторить 0 одиннадцать раз).
"p[0,2,5,8]x022,1111x010,x18,x07,x110,x05,x17,33111000x18,32311000x19,3311003333x111,001133x110,001113x110,011213x110,011113x110,011113x110,0011233x15,x35,00222331133322200222203333002222"
Получаем строку из 256 символов
0000000000000000000000111100000000001111111100000001111111111000001111111331110001111111132311000111111111331100333311111111111001133111111111100111311111111110112131111111111011113111111111101111311111111110011233111113333300222331133322200222203333002222

Разбиваем на 16 подстрок
0000000000000000
0000001111000000
0000111111110000
0001111111111000
0011111113311100
0111111113231100
0111111111331100
3333111111111110
0113311111111110
0111311111111110
1121311111111110
1111311111111110
1111311111111110
0112331111133333
0022233113332220
0222203333002222

Заменяем индексы цветами из палитры, получаем жучка yj-zin3n79g0u0dgucf6teanlfm.png
P.S. Если массив индексов палитры не указан, то используется полная базовая палитра. Для палитры спрайта до 10 цветов включительно индексы кодируются одной цифрой (0-9), до 100 цветов - двумя цифрами (00-99), и т.д.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы