# ttf_to_bitmap **Repository Path**: imhzy/ttf_to_bitmap ## Basic Information - **Project Name**: ttf_to_bitmap - **Description**: 获取ttf中的文字输出二值化结果,适用单片机使用 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-02 - **Last Updated**: 2026-01-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TTF字体转点阵工具 这是一个专为单片机和嵌入式系统设计的C语言库,可以将TTF字体文件转换为二值点阵数组。 ## 功能特点 - **纯C实现**:仅依赖标准C库,适合单片机环境 - **内存占用小**:优化的内存使用,支持资源受限的设备 - **可配置**:支持自定义字体大小和输出格式 - **缓存机制**:内置字形缓存,提高渲染性能 - **跨平台**:支持多种架构(ARM、RISC-V、MIPS等) ## 编译方法 ### PC版本(测试用) ```bash make ``` ### ARM嵌入式版本 ```bash make arm ``` ### 其他平台 ```bash make cross-mips # MIPS平台 make cross-riscv # RISC-V平台 ``` ## 使用方法 ### 命令行使用 ```bash # 转换单个字符(16x16点阵) ./ttf_to_bitmap /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf -t "A" -s 16 -v # 转换多个字符(24x24点阵) ./ttf_to_bitmap /path/to/font.ttf -t "Hello" -s 24 # 输出到C文件(用于嵌入单片机项目) ./ttf_to_bitmap font.ttf -t "0123456789" -s 16 -o font_digits.c # 转换整个ASCII字符集 ./ttf_to_bitmap font.ttf -t "$(printf '%b' $(printf '\\\\x%02x ' {32..126}))" -s 12 -o ascii_font.c ``` 参数说明: - `font.ttf`:TTF字体文件路径 - `-t "text"`:要转换的文字(默认:'A') - `-s size`:点阵大小,单位像素(默认:24) - `-o file`:输出文件路径(C格式) - `-v`:显示详细信息(包含点阵预览) - `-h`:显示帮助信息 ### 输出格式 输出的C文件包含两种数据结构: ```c // 点阵数据数组(1bit=1像素) const uint8_t glyph_41_data[] = { 0xE0, 0x03, 0x90, 0x03, ... }; // 字形元数据结构 const BitmapGlyph glyph_41 = { .width = 16, // 实际宽度(像素) .height = 17, // 实际高度(像素) .bearing_x = 0, // 左边距 .bearing_y = 17, // 顶边距 .advance = 16, // 下一个字符的X偏移 .data_size = 34, // 数据大小(字节) .data = glyph_41_data }; ``` ### 代码集成 ```c #include "ttf_to_bitmap.h" // 1. 准备字体数据(需要完整加载到内存) uint8_t* font_data = read_font_file("font.ttf"); size_t font_size = get_file_size("font.ttf"); // 2. 初始化TTF上下文 TTFContext ctx; ttf_init(&ctx, font_data, font_size, 16); // 16像素高度 // 3. 获取字符点阵 BitmapGlyph glyph; ttf_get_glyph(&ctx, 'A', &glyph); // 4. 使用点阵数据 // glyph.data - 点阵数据(1bit=1像素) // glyph.width - 宽度(像素) // glyph.height - 高度(像素) // 5. 清理 ttf_cleanup(&ctx); ``` ## 点阵数据格式 点阵数据以1bit per pixel格式存储: - 每个字节表示8个像素(水平排列) - MSB(最高位)在最左边 - 按行存储 示例:16x16点阵 ``` 数据大小 = (16 * 16 + 7) / 8 = 32 字节 ``` ## 文件结构 ``` . ├── ttf_to_bitmap.h # 头文件(API定义) ├── ttf_to_bitmap.c # 实现文件 ├── main.c # 示例程序 ├── Makefile # 编译脚本 └── README.md # 说明文档 ``` ## API说明 ### 初始化和清理 ```c int ttf_init(TTFContext* ctx, const uint8_t* font_data, size_t font_size, uint16_t target_height); ``` 初始化TTF上下文。 ```c void ttf_cleanup(TTFContext* ctx); ``` 清理资源。 ### 获取点阵 ```c int ttf_get_glyph(TTFContext* ctx, uint32_t codepoint, BitmapGlyph* glyph); ``` 获取指定字符的点阵数据。 ### 其他工具 ```c int ttf_measure_text(TTFContext* ctx, const char* str); ``` 计算字符串显示宽度。 ```c void ttf_clear_cache(TTFContext* ctx); ``` 清空字形缓存。 ## 配置选项 在`ttf_to_bitmap.h`中可以配置以下参数: ```c #define MAX_FONT_SIZE 64 // 最大支持字号 #define MAX_CACHE_GLYPHS 128 // 缓存字形数量 #define MAX_PATH_LENGTH 64 // 文件路径最大长度 ``` ## 注意事项 1. **内存要求**:需要将完整的TTF文件加载到内存 2. **字体支持**:支持ASCII字符,Unicode支持需要扩展cmap解析 3. **性能**:首次渲染较慢,后续使用缓存加速 4. **字形质量**:简化渲染算法,小字号效果可能不如专业库 ## 扩展建议 - 添加完整Unicode支持(扩展cmap表解析) - 实现反锯齿渲染 - 支持复合字形 - 添加旋转和变换功能 - 优化内存使用(流式处理) ## 许可证 MIT License ## 作者 Generated for embedded systems development