# LiteType **Repository Path**: Gemsea/lite-type ## Basic Information - **Project Name**: LiteType - **Description**: LiteType:一个轻量级的嵌入式字体类型处理库,专注于提供高效、简洁的字体定义与转换功能,适用于多种嵌入式编程场景。 - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-18 - **Last Updated**: 2026-05-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LiteType `License: MIT` `Language: C / C++` `Version: 1.0.1` `Platform: Win32 | RT-Thread` 轻量级跨平台字体引擎,面向嵌入式和资源受限场景优化。 ## 简介 LiteType 是一个纯 C 实现的轻量级字体引擎,支持位图字体和向量字体的创建、加载与渲染。核心引擎零外部依赖,通过平台抽象层可轻松移植到任意嵌入式平台。 **核心价值** - 纯 C11 实现,无 OS 依赖,可运行于裸机环境 - 三种自研字体格式(LBF / LVF / LCF),针对嵌入式场景优化 - 跨平台抽象层,已适配 Win32 和 RT-Thread - Unicode 稀疏区段索引,高效存储 BMP 字符 - 特性开关宏,按需裁剪功能模块,最小化代码体积 **适用场景** - 嵌入式 GUI 字体渲染 - IoT 设备显示屏 - 工业 HMI 界面 - 游戏引擎字体系统 ## 功能特性 - **三种字体格式** - **LBF**(LiteBitFile)— 位图字体,存储光栅化后的位图数据,渲染速度最快 - **LVF**(LiteVectorFile)— 向量字体,存储轮廓曲线数据,可无损缩放,文件体积更小 - **LCF**(LiteCombineFile)— 组合字体,将多个子字体(LBF/LVF)打包到一个文件中 - **字体创建**(Creator API)— 可从ttf等现有字体按需全部/部分/Unicode区段按需编码生成 LBF/LVF 字体文件 - **字体加载**(Loader API)— 支持从文件路径、内存缓冲区、流对象三种来源加载 - **字形布局与渲染**(Layout API)— 支持 Bold/Italic 样式变换,双线性插值缩放 - **向量轮廓光栅化** — 基于 FreeType 算法将轮廓转换为位图 - **跨平台抽象** — 内存管理、流 I/O、标准库函数全部抽象,核心逻辑不直接使用平台 API - **Unicode 稀疏区段索引** — 将 0x0000-0xFFFF 划分为 146 个区段,稀疏存储,大幅减少空字符占用的索引空间 - **特性开关宏** — 通过编译宏控制功能模块的启用/禁用 ## 快速上手 5 步核心流程:**Init → Loader\_New → Layout\_New → LoadChar → Done** ```c #include "LiteType.h" #include int main(int argc, char *argv[]) { if (argc < 2) { printf("Usage: demo \n"); return 1; } /* 1. 初始化引擎 */ LTHANDLE library = LiteType_Init(); if (!library) return 1; /* 2. 加载字体文件 */ LTHANDLE loader = LiteType_Loader_New(library, argv[1]); if (!loader) { LiteType_Done(library); return 1; } /* 3. 创建布局引擎(字号 20,8bit 位深,无粗体/斜体) */ LTHANDLE layout = LiteType_Layout_New(loader, 20, 8, LT_FALSE, LT_FALSE); if (!layout) { LiteType_Loader_Done(loader); LiteType_Done(library); return 1; } /* 4. 渲染字符 'A' (0x41) */ LT_Bitmap bmp = NULL; if (LiteType_Layout_LoadChar(layout, 0x41, &bmp) == 0 && bmp) { printf("width=%u height=%u advance=%d\n", bmp->width, bmp->height, bmp->advance); } /* 5. 释放资源 */ LiteType_Layout_Done(layout); LiteType_Loader_Done(loader); LiteType_Done(library); return 0; } ``` ## 构建方式 ### CMake(推荐) ```bash # 基础构建 cmake -B build cmake --build build # 启用测试和示例 cmake -B build -DLITETYPE_BUILD_TESTS=ON -DLITETYPE_BUILD_SAMPLES=ON cmake --build build ``` ### Visual Studio 使用项目根目录的 `LiteType.sln` 解决方案文件直接打开构建。 ### 嵌入式工具链 项目提供面向嵌入式工具链的传统 Make 文件: | 文件 | 工具链 | | ---------------------- | --------------------------------- | | `LiteType/adslib.mak` | ARM Developer Suite (ADS) | | `LiteType/msvclib.mak` | MSVC | | `LiteType/rvctlib.mak` | RealView Compilation Tools (RVCT) | | `LiteType/SConscript` | SCons | ### 依赖说明 | 依赖 | 用途 | 获取方式 | | -------- | --------------------------------- | -------------------------- | | FreeType | TrueType/OpenType 字体解析,光栅化算法基础 | CMake FetchContent 自动下载 | | MFC | LiteTypeCreator GUI 工具(仅 Windows) | Visual Studio Installer 安装 | > 核心引擎(LiteType 静态库)不依赖 FreeType,FreeType 仅用于 C++ 封装层和 GUI 工具。 ## 项目结构 ``` LiteType/ ├── LiteType/ 核心 C 引擎(静态库) │ ├── LiteType.h 主公共 API 头文件(外部只需包含此文件) │ ├── LiteType.c 核心引擎实现 │ ├── LiteTypeSystem.h 平台抽象层接口 │ ├── LiteTypeSystem.c 平台抽象层通用实现 │ ├── LiteTypeSystemWin32.c Win32 平台实现 │ ├── LiteTypeSystemRTT.c RT-Thread 平台实现 │ ├── LiteTypeLoader.c 字体加载器 │ ├── LiteTypeLayout.c 布局引擎(Bold/Italic/缩放) │ ├── LiteTypeCreator.c 字体创建器 │ ├── LiteTypeRaster.c 光栅化器(基于 FreeType 算法) │ ├── LiteTypeSerDes.c 序列化/反序列化 │ ├── LiteBitFile.* LBF 位图字体格式 │ ├── LiteVecFile.* LVF 向量字体格式 │ ├── LiteCombineFile.* LCF 组合字体格式 │ ├── UnicodeSection.* Unicode 区段管理 │ └── tests/ 核心引擎测试 ├── LiteTypeGeneric/ C++ 封装层(静态库) │ ├── LiteTypeFontEngine.* LiteType 引擎封装 │ ├── FreeTypeFontEngine.* FreeType 适配器 │ ├── LiteTypeViewer.* 查看/编辑抽象接口 + 工厂类 │ └── tests/ C++ 层测试 ├── LiteTypeCreater/ MFC GUI 工具(仅 Windows) ├── samples/ 示例代码 ├── docs/ 文档 │ ├── CHANGELOG.md 变更日志 │ └── GBF_GVF_Format_Specification.md 字体格式技术规范 ├── cmake/ CMake 辅助脚本 ├── scripts/ 工具脚本 ├── CMakeLists.txt 顶层 CMake 构建文件 ├── LiteType.sln Visual Studio 解决方案 └── LICENSE 许可证文件 ``` ## API 概览 外部使用者只需包含 `LiteType.h` 即可使用完整引擎功能。 ### Library — 引擎生命周期 | 函数 | 说明 | | ------------------------ | ------------------- | | `LiteType_Init(void)` | 初始化引擎,返回 Library 句柄 | | `LiteType_Done(library)` | 销毁引擎,释放所有资源 | ### Bitmap — 位图管理 | 函数 | 说明 | | -------------------------------------------------------------------------- | --------- | | `LiteType_Bitmap_New(library, width, height, bitcount, initBuf)` | 创建位图对象 | | `LiteType_Bitmap_Done(library, bitmap)` | 销毁位图对象 | | `LiteType_Bitmap_EnsureCapacity(library, bitmap, width, height, bitCount)` | 确保位图缓冲区容量 | ### Outline — 轮廓管理(需 `ENABLE_LITEVECTORFILE`) | 函数 | 说明 | | --------------------------------------------------------------- | ------- | | `LiteType_Outline_New(library, n_contours, n_points)` | 创建轮廓对象 | | `LiteType_Outline_Clone(library, source)` | 克隆轮廓对象 | | `LiteType_Outline_Remove(outline, idx)` | 移除指定轮廓 | | `LiteType_Outline_GetSize(outline)` | 获取序列化大小 | | `LiteType_Outline_Transform(outline, source, tosize, fromsize)` | 缩放变换 | | `LiteType_Outline_Done(library, outline)` | 销毁轮廓对象 | ### Creator — 字体创建(需 `ENABLE_ENCODER`) | 函数 | 说明 | | -------------------------------------------------- | ----------- | | `LiteType_Creator_New(library, filepathname)` | 创建字体创建器 | | `LiteType_Creator_SetParam(creator, param, value)` | 设置参数(位深/压缩) | | `LiteType_Creator_DelChar(creator, code)` | 删除字符 | | `LiteType_Creator_SaveChar(creator, code, data)` | 保存字符数据 | | `LiteType_Creator_Flush(creator)` | 刷新写入文件 | | `LiteType_Creator_Done(creator)` | 销毁创建器 | ### Loader — 字体加载 | 函数 | 说明 | | --------------------------------------------------- | -------- | | `LiteType_Loader_New(library, filepathname)` | 从文件创建加载器 | | `LiteType_Loader_New_Stream(library, stream, size)` | 从流创建加载器 | | `LiteType_Loader_New_Memory(library, buf, bufSize)` | 从内存创建加载器 | | `LiteType_Loader_GetCount(loader)` | 获取字符总数 | | `LiteType_Loader_SetParam(loader, param, value)` | 设置参数 | | `LiteType_Loader_IsExist(loader, code, size)` | 检查字符是否存在 | | `LiteType_Loader_Done(loader)` | 销毁加载器 | ### Layout — 字形布局与渲染 | 函数 | 说明 | | ----------------------------------------------------------- | ----------- | | `LiteType_Layout_New(loader, size, bitCount, bold, italic)` | 创建布局引擎 | | `LiteType_Layout_LoadChar(layout, code, pBmp)` | 加载并渲染字符 | | `LiteType_Layout_GetMetric(layout, code, pMetric)` | 获取度量信息(不渲染) | | `LiteType_Layout_Done(layout)` | 销毁布局引擎 | ### C++ 封装层 C++ 封装层(`LiteTypeGeneric`)提供面向对象的接口: | 类 | 说明 | | -------------------- | ------------------------------- | | `LiteTypeViewer` | 字体查看器抽象接口 | | `LiteTypeEditor` | 字体编辑器抽象接口 | | `LiteTypeFactory` | 工厂类,自动选择 LiteType 或 FreeType 引擎 | | `LiteTypeFontEngine` | LiteType 引擎的编辑器实现 | | `FreeTypeFontEngine` | FreeType 适配器实现 | ## 字体格式说明 | 格式 | 全称 | 类型 | 特点 | 适用场景 | | ------- | --------------- | ---- | ----------------------------- | --------- | | **LBF** | LiteBitFile | 位图字体 | 渲染速度最快,支持 1bit/8bit 位深,RLE 压缩 | 固定字号、性能优先 | | **LVF** | LiteVectorFile | 向量字体 | 可无损缩放,文件体积更小 | 多字号、存储受限 | | **LCF** | LiteCombineFile | 组合字体 | 最多打包 5 个子字体(LBF/LVF) | 混合位图+向量方案 | 详细的文件格式规范请参阅 [LBF/LVF/LCF 格式技术规范](docs/LBF_LVF_LCF_Format_Specification.md)。 ## 平台移植指南 LiteType 通过平台抽象层隔离所有平台相关代码,核心编解码逻辑不直接使用任何平台 API。移植到新平台只需实现以下三组函数: ### 1. 内存管理(Memory) ```c typedef void *(*LT_MALLOC)(LT_UINT32 size); typedef void *(*LT_REALLOC)(void *p, LT_UINT32 newsize); typedef void (*LT_FREE)(void *p); ``` ### 2. 流 I/O(Stream) ```c typedef LT_INT32 (*LT_READ)(LT_IOHandler f, LT_BYTE *p, LT_UINT32 size); typedef LT_INT32 (*LT_WRITE)(LT_IOHandler f, LT_BYTE *p, LT_UINT32 size); typedef LT_INT32 (*LT_SEEK)(LT_IOHandler f, LT_INT32 pos); typedef void (*LT_CLOSE)(LT_IOHandler f); ``` ### 3. 标准库函数(StdLib) 实现 `LiteType_Memcmp_Sys`、`LiteType_Memcpy_Sys`、`LiteType_Memset_Sys` 等函数,或直接映射到目标平台的 C 库实现。 **已支持平台** | 平台 | 实现文件 | 说明 | | --------- | ----------------------- | -------------- | | Win32 | `LiteTypeSystemWin32.c` | Windows 桌面平台 | | RT-Thread | `LiteTypeSystemRTT.c` | RT-Thread RTOS | ## 示例代码 | 示例 | 文件 | 说明 | | ---- | ------------------------------------------------------ | ----------------------------------------------- | | 基础用法 | [sample\_basic.c](samples/sample_basic.c) | 最小使用流程:Init → Loader → Layout → LoadChar → Done | | 字体创建 | [sample\_font\_create.c](samples/sample_font_create.c) | 使用 Creator API 创建 LBF 位图字体文件 | | 内存加载 | [sample\_memory\_font.c](samples/sample_memory_font.c) | 从内存缓冲区加载字体,同一 Loader 创建多个不同字号 Layout | | 文本渲染 | [sample\_text\_render.c](samples/sample_text_render.c) | 完整文本渲染:UTF-8 转码、文本测量、RGB565 Alpha 混合、多行对齐 | ## 特性开关宏 通过编译宏控制功能模块的启用/禁用,实现按需裁剪: | 宏 | 默认 | 说明 | | ------------------------ | -------- | ------------------ | | `ENABLE_ENCODER` | Win32 启用 | 编码器功能(Creator API) | | `ENABLE_STREAMIO` | 启用 | 文件流 I/O | | `ENABLE_LITECOMBINEFILE` | 启用 | LCF 组合字体格式 | | `ENABLE_LITEBITFILE` | 启用 | LBF 位图字体格式 | | `ENABLE_LITEVECTORFILE` | 启用 | LVF 向量字体格式 | | `ENABLE_ITALIC` | 启用 | 斜体样式支持 | | `ENABLE_BOLD` | 启用 | 粗体样式支持 | | `LT_DIAG` | 启用 | 诊断日志输出 | ## 许可证 本项目采用双许可证: - **MIT License** — 项目主体代码,Copyright (c) 2026 Gemsea - **FreeType License (FTL)** — `LiteTypeRaster.c` 基于 FreeType 光栅化算法,受 FTL 约束 详见 [LICENSE](LICENSE) 文件。 ## 联系方式 - 作者:Gemsea ()