c - GIF LZW解压提示?

标签 c gif lzw

我已经阅读了很多关于 GIF LZW 解压缩的文章,但我仍然对它的工作原理或如何解决编码方面的编码问题感到困惑。

据我了解,当我访问 LZW 压缩数据的 GIF 字节流时,该流告诉我:

最小代码大小,也就是第一个字节开始的位数。

现在,据我了解,我必须为清晰代码添加一个,或者为清晰代码和 EOI 代码添加两个。但我对它是哪一个感到困惑?

假设我有 3 个颜色代码(01、10、11),假定 EOI 代码(如 00),最小代码大小(2)之后的字节将是 2 位,还是 3 位因式分解在清晰的代码中?或者明文代码/EOI 代码是否都已包含在最小尺寸中?

第二个问题是,从文件中读取动态大小位的最简单方法是什么?因为从偶数字节 (8) 读取奇数位(3 位、12 位等)听起来可能很困惑且有错误?

最佳答案

从您的第二个问题开始:是的,您必须从 8 位字节流中读取动态大小的位。您必须跟踪正在读取的大小,以及之前读取操作留下的未使用位数(用于正确放置文件中的“下一个字节”)。

IIRC 有 8 位的最小代码大小,这将为您提供 256(基数 10)的清晰代码和 257 的输入结束。第一个存储的代码是 258。

我不确定您为什么不查找公共(public)领域图形库之一的来源。我知道我没有,因为在 1989 年 (!) 没有图书馆可供使用,也没有完整描述的互联网。我必须从一个可以显示图像和一些 GIF 文件的示例可执行文件(用于 Compuserve 的 MS-DOS)实现一个解码器,所以我知道这是可以做到的(但这不是花费你时间的最有效方式)。

关于c - GIF LZW解压提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13215654/

相关文章:

java - JTable 内带有图像的 JButton。怎么让它变成动画呢?

c - 理解一些基本链表函数时遇到的问题

c - 为什么 libxml2 在 C/C++ 代码中到处都使用 "BAD_CAST"?

c - 在 C 中将两个文件合并为第三个文件(fread 和 fwrite)

java - 扫描仪 - 线程 "main"java.util.NoSuchElementException : No line found 中出现异常

c++ - LZW减压

algorithm - LZW-解压缩算法

c++ - printf( ) 的内存消耗

swift - 在后台或主线程中执行更新时设置 GIF 图像会阻止 UI

javascript - 如何制作多种颜色的指示器