Реализую чтение файлов GIF стандарта 89a.
Проблема возникла в чтении графических блоков.
Каждый LZW код представлен цепочкой битов разной длины. При этом мне известна только длина первого кода (initial code size).
Например:
0010-1010-0010-0000-00111-10000-11111…
Как определить, когда стоит увеличить длину считываемого кода?
//
Возможно я неверно обрабатываю CC (Clear code)?
Когда я встречаю в потоке CC — я сбрасываю длину кода к первоначальной и соответственно счетчик считываний
очень просто — когда у вас число паттернов достигло предела, обусловленного числом бит (4 битами можем закодировать лишь 16 паттернов), мы увеличиваем это самое число бит на паттерн.
initial_code_size вы читаете из заголовка, +1.
зарезервированно 2^initial_code_size + 2, то есть 18, читаете 14 паттернов, затем увеличиваете code_size. читаете 32 паттерна, опять увеличиваете.
в общем всё просто, надо лишь аккуратно это реализовать.
не забывать про код сброса, например.