返回首页
最新
嗨,HN,
我开始这个项目是因为厌倦了那些隐藏内存分配、引入大量 libc 或只解决问题一小部分的 BMP 库。虽然有很多类似 libbmp 的库,但功能分散:一个负责解码,另一个负责编码,还有一个专注于嵌入式,另一个则是单头文件。在实际项目中,这通常意味着需要依赖 5 到 10 个小库才能加载和显示图像。
我希望有一个可预测的库:没有内存分配、只有一个头文件、对缓冲区的完全控制,并且可以在桌面和微控制器上使用。这样你总是知道内存来自哪里以及去向何处。
随着时间的推移,我越来越深入这个项目,并开始围绕我称之为 ESS 的理念进行优化:能效、速度、小二进制。我为常见的 24/32bpp BMP 添加了快速路径,消除了热循环中的不必要分支,并专注于可预测的性能。对于嵌入式系统,我添加了一个流式解码器,可以通过回调直接写入 LCD/DMA,甚至可以只解码一个裁剪的矩形,以节省 CPU 时间和功耗。
最终的结果是 TurboLibBMP:一个单头文件、类似 stb 风格的 BMP 解码器和编码器,使用 C 编写,没有内存分配、没有标准输入输出、没有隐藏缓冲区,并且用户可以完全控制内存和行为。它遵循 GPL-3.0 许可,并且可以在 C 和 C++ 中使用。
我主要是为我自己的低级和嵌入式项目构建这个库,但我分享出来是希望其他人也能找到它的用处。我非常希望能收到关于 API 设计、边缘情况以及这种方法在实际项目中是否合理的反馈。
仓库链接:<a href="https://github.com/Ferki-git-creator/turbo-lib-bmp" rel="nofollow">https://github.com/Ferki-git-creator/turbo-lib-bmp</a>
一个关于哥本哈根建筑层面高度和屋顶几何指标的演示数据集,该数据集来源于空中激光雷达,并与权威的建筑轮廓相连接。