我需要从 bmp 实现 gif 以仅使用 c++ 标准库对阿贝尔沙堆模型进行动画处理。
理想情况下,您的起点是 GIF 和 BMP 的规范。
GIF 规范是一件很容易找到的事情。
不幸的是,(至少据我所知)Microsoft从未将有关BMP格式的所有信息整合到一个文档中以充当规范。在不同的地方有很多文档,但没有一个地方将所有文档放在一起并完全组织起来(至少我知道)。
这意味着你有点坚持零敲碎打的方法。幸运的是,您可能不需要读取每个可能的合法BMP文件 - 它已经存在很长时间了,因此有很多变化,其中许多很少再使用(例如,16色位图)。
猜测一下,您可能只需要处理一两个特定的变体(例如,每像素 24 或 32 位),这使生活变得更加轻松。这是一个页面,它至少为有关如何格式化 BMP 文件的文档提供了一个起点。
不过,您可能需要至少考虑一些辅助问题。除非您的输入 BMP 文件使用每像素 8 位和调色板来定义与这 255 个值中的每一个关联的颜色,否则您可能至少会遇到一个其他问题:您很可能从一个有很多颜色的文件开始(例如,如上所述,每像素 24 或 32 位), 但是对于 GIF 文件,您需要将其减少到每像素仅 8 位,因此您需要选择 255 种最能代表您关心的图片中的颜色,然后对于每个输入像素,选择其中一种 255 种颜色来尽可能代表该像素。
根据您对色彩保真度与空间分辨率的关心程度,有很多方法可以完成这项工作,从相当简单(但结果可能相当平庸)到极其复杂(结果可能更好,但可能仍然相当平庸)。