解析 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 位代码了。