c++ - 如何最好地实现 GIF 加载类?

标签 c++

<分区>

任务:

我想编写一个 C++ 头文件,它可以加载给定的 GIF 文件并将其转换为 RGBA 像素数组。

问题:

我发现试图阅读规范时会感到困惑,因为某些 block (例如注释)可能出现在文件的任何位置。我还尝试阅读其他 GIF 加载文件的源代码,但我发现这些文件也非常困惑。我曾尝试为它编写代码,但在出现严重错误后,我将其删除并推迟了尝试,因为它不是必需的:现在是。

限制:

我不想使用外部库(建议 boost 在这里有点陈词滥调)或预构建代码,因为我想了解正在发生的事情,但主要出于以下几个原因编写我自己的代码:

  1. 这样我就可以在出错时修复代码。
  2. 这样我就可以扩展功能并将它们与我已有的其他类合并。
  3. 为避免许可问题:
    • 因此我不会因滥用而被起诉(我既不想付费也不想被迫将我的代码开源)。
    • 这样我就可以将代码与程序捆绑在一起或出售(这不太可能,但我在这里涵盖了基础)而没有任何版权/copyleft 问题。
    • 这样我就可以安全地将代码提供给其他人,并且能够告诉他们他们不必担心许可证问题。
    • 因此我可以将代码提供给没有加载 GIF 的库,这样他们就可以使用它而不必担心许可问题。
  4. 保持代码库较小(与其他功能库相比)。

我知道这是一个很长的列表,似乎没有必要,但是当我之前在堆栈溢出时说“没有库”时,人们认为这是可选的,他们可以说服我提交或强制我接受库。

问题:

理解(我发现规范令人困惑)和实现 GIF 加载以便将 GIF(可能是单个图像或一系列图像)转换为像素数组的最佳方法是什么?阅读时如何最好地忽略“不必要的”数据(至少就手头的任务而言,因此忽略评论等)?

为方便起见,您可以假设像素数组类已经存在。

在这方面,我们将不胜感激带有解释的清晰代码片段。

最佳答案

好的,因为我不能再编辑我的评论了……正如 Mat 所建议的,尝试理解规范。我推荐网站 http://www.matthewflickinger.com/lab/whatsinagif/bits_and_bytes.asp#comment_extension_block因为在我看来,它是关于 gif 格式结构的一个很好的信息来源,有很 multimap 形和字节码示例。例如您关于评论的问题:当您在数据流中找到字节对 21 FE 时,这将引入评论 block 。以下字节表示 ascii 字符,在该 block 的末尾您将找到一个 00

关于c++ - 如何最好地实现 GIF 加载类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13083506/

相关文章:

c++ - 解释指针的这种情况

c++ - C++ 整数转字符串

c++ - 成员初始化列表符号 : curly braces vs parentheses

c++ - 结构值未输出到屏幕

c++ - 找不到 mysql.h 文件

c++ - 如何在 C++ 中读取性能计数器

c++ - 错误 : no matching function for call to 'getline(FILE*&, std::string&)'

C++模板排序

c++ - 我如何制作一个允许所有左值引用、右值引用和 initializer_list 的模板化构造函数?

c++ - 数据报 Unix 套接字上的 ECONNREFUSED