Сообщение отредактировал Марат: 24 Март 2015 - 18:15
Сжатие LZSS, нужна помощь.
#21
Отправлено 24 Март 2015 - 18:13
#22
Отправлено 24 Март 2015 - 18:55
А ты пробовал прогой Трикзтера распаковать данные? У него вроде под LZSS заточено GBA.
Она LZ77, а не LZSS
LZSS - это частный случай LZ77. К слову, в LZSS флаги идут не в отдельном байте, а между литералами и парой длина + смещение.
Алгоритм примерно такой:
if ReadBit() = 1 then begin Literal:= ReadBits(8); .... end else begin MatchLength:= ReadBits(4); MatchOffset:= ReadBits(12); .... end;
Тот алгоритм, что у тебя в Ромхакинге обычно называют LZ77.
#23
Отправлено 24 Март 2015 - 19:04
Вон оно как, спасибо за информацию, запомню
#24
Отправлено 25 Март 2015 - 08:31
Спасибо за подсказку. Прошу проверить.
Программная неудача.
#25
Отправлено 25 Март 2015 - 09:46
Спасибо за подсказку. Прошу проверить.
У тебя же 12 битное смещение, поэтому надо писать так:
lz_d1=(lz_dist&0xf00)>>8;
#26
Отправлено 25 Март 2015 - 10:17
Всё верно. Случайно добавил лишнюю "F" в маске.
Марат, а ты свою утилиту для Monster World в C++, С# или Delphi писал?
Программная неудача.
#27
Отправлено 25 Март 2015 - 11:53
На дельфи. Я всё пишу на дельфях. Я уже привык к дельфи.
#28
Отправлено 25 Март 2015 - 13:40
К сожалению, под самый конец сбивается...
Может я что-то не так исправил:
#29
Отправлено 25 Март 2015 - 13:48
if (chunk.bitcount<8 && chunk.bitcount!=0) { int bit_shift; bit_shift=8-chunk.bitcount; chunk.code=chunk.code<<bit_shift; _outputData[_headerPosition]=chunk.code; }
Здесь ошибка. Сдвиг надо делать вправо, а не влево.
#30
Отправлено 25 Март 2015 - 13:52
Здесь ошибка. Сдвиг надо делать вправо, а не влево.
Исправил, заработало.
Большое спасибо, Proton, большое спасибо, Марат. Вы мои кумиры!
#31
Отправлено 25 Март 2015 - 15:26
Ребята, извините за косячный код. На скорую руку, без проверки на расжатие.
Программная неудача.
#32
Отправлено 25 Март 2015 - 15:34
Ребята, извините за косячный код. На скорую руку, без проверки на расжатие.
Да ничего, главное разобрались и всё работает. Кстати, сжатие лучше чем оригинал.
#33
Отправлено 26 Март 2015 - 00:22
Может и нагавн*кодил, но работает
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных