0

任务:

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

问题:

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

限制:

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

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

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

问题:

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

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

带有解释的清晰代码片段将不胜感激。

4

1 回答 1

1

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

于 2012-10-26T08:54:14.503 回答