stb 单文件库:拷一个头文件,10 行代码跑通 stb 图像处理
【免费下载链接】stbstb single-file public domain libraries for C/C++项目地址: https://gitcode.com/GitHub_Trending/st/stb
每次要写个读 PNG 的小工具,都得先拖一堆依赖库和构建系统进来,配置时间经常比功能本身还长。stb 是另一条路:stb 图像处理、字体渲染、数据结构这些活,各自被压进一个头文件里,零配置,拷走就能用。
什么场景下你需要它
做小游戏时想快速生成一张无缝拼接的瓦片地图,又不想自己设计瓦片集和连接规则,仓库里的 Wang tile(按边缘颜色自动拼接的瓦片集)生成器可以直接上手。写工具脚本只需要读写几张 PNG,实在不想为它配一套 CMake,单个 stb_image.h 就能独立编译。游戏里要把 TrueType 字体文字画进纹理,引入 freetype 又嫌重,stb_truetype.h 一个文件足够。
功能地图:一个文件能干什么
- 图像处理:stb_image.h 加载常见图片格式,stb_image_write.h 保存 PNG/JPEG,stb_image_resize2.h 负责缩放
- 字体渲染:stb_truetype.h 解析 TrueType 字体并可生成 SDF(用距离场表示字体轮廓,放大后依然锐利)位图,stb_easy_font.h 几行代码画出内置小字体
- 数据结构:stb_ds.h 提供动态数组、哈希表等写法,像写宏一样用容器
- 地图生成:stb_herringbone_wang_tile.h 从少量瓦片拼出大幅无缝地图
跑起来:3 步走通最小示例
最短路径就是:拷贝头文件 → 在一个 .c 文件里定义实现宏 → 调 API。
#define STB_IMAGE_IMPLEMENTATION #include "stb_image.h" #define STB_IMAGE_WRITE_IMPLEMENTATION #include "stb_image_write.h" int main(void) { int w, h; // 加载 PNG 并强制转成 4 通道 RGBA unsigned char *px = stbi_load("in.png", &w, &h, NULL, 4); stbi_write_png("out.png", w, h, 4, px, 0); stbi_image_free(px); return 0; }gcc main.c -o main -lm直接编译,跑完得到 out.png,全程没碰任何配置文件 ✅
眼见为实:效果展示
stb_herringbone_wang_tile 生成的黑白地图,每一块都是那几个瓦片之一,但接缝全部对上了。
换一组随机种子,同一套连接规则也能长成这种高对比度的黑白纹理。
同一行字从 10pt 一路渲到 104pt,大字号下边缘依然干净。
别忽略的这几个细节
- 每个 STB_XXX_IMPLEMENTATION 宏在整个项目里只能出现在一个源文件里,否则会链接报错。
- 只拷你需要的头文件,别把仓库根目录一堆 .h 全塞进工程。
- 每个头文件开头的大段注释就是完整使用说明,带样例代码,不用另找文档。
- stbi_load 的通道参数填 4 可直接拿到 RGBA,用完记得 stbi_image_free。
- Wang tile 生成需要加载专用工具生成的模板文件,任意 PNG 塞不进去。
公共领域许可意味着直接放进商业项目也没问题,条款见 LICENSE,使用技巧可看 docs/stb_howto.txt,各模块的完整示例代码都在 tests/ 目录里。
【免费下载链接】stbstb single-file public domain libraries for C/C++项目地址: https://gitcode.com/GitHub_Trending/st/stb
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考