При синтаксическом анализе файла GIF дескриптор изображения включает в себя битовую ширину некодированных символов (пример: 8 бит).
Как вы, вероятно, уже знаете, исходный размер кода сжатых данных на один бит шире, чем битовая ширина некодированных символов (пример: 9 бит).
Кроме того, как вы, вероятно, уже знаете, возможные значения сжатого кода в GIF-файле постепенно увеличиваются в размере,
максимум до 0xFFF == 4095, для хранения которого требуется 12 бит.
Для каждого кода, который декомпрессор извлекает из сжатых данных,
декомпрессор добавляет новый элемент в свой словарь.
Например, если первые два 9-битных кода, которые считывает декомпрессор, равны 0x028 и 0x0FF,
декомпрессор добавляет двухбайтовую последовательность в свой словарь.
Позже, если декомпрессор прочитает код 0x102,
декомпрессор декодирует этот код 0x102 в два 8-битных байта 0x28 0xFF.
Следующему элементу, который декомпрессор добавляет в словарь, присваивается код 0x103.
Следующему элементу, который декомпрессор добавляет в словарь, присваивается код 0x104. ...
В конечном итоге декомпрессор добавляет элемент в словарь, которому присваивается код 0x1FF.
Это самое большое число, которое умещается в 9 бит.
После сохранения этого элемента в словаре,
декомпрессор начинает читать 10-битные коды.
Следующему элементу, который декомпрессор добавляет в словарь, присваивается код 0x200.
В последовательности данных нет специальной «команды», которая приказывает декомпрессору увеличивать ширину кода.
Декомпрессор должен отслеживать, сколько элементов содержит словарь (что часто может быть удобно повторно использовано в качестве индекса того, куда записать следующий элемент в словарь).
Когда декомпрессор добавляет элемент 0x1ff в словарь, пора декомпрессору начать читать 10-битные коды.
Когда декомпрессор добавляет элемент 0x3ff в словарь, пора декомпрессору начать читать 11-битные коды.