一个专门给微控制器系统准备的字体压缩、解压和渲染库,让你的 MCU 显示如此丝滑

 

前几天做个小屏幕项目,结果被那锯齿字体虐得不要不要的。LCD、OLED各种显示,看上去就像老电视信号差。搜索半天,发现好多方案要么打不开源、要么体积大到 MCU 根本装不下。要不就只能将就,用最粗糙的点阵字。心想:总有办法吧?

MCUFont 到底是啥?
MCUFont 是一个专门给微控制器系统准备的字体压缩、解压和渲染库。它的亮点就是:

  • • 支持 16 级抗锯齿,文字平滑不生硬

  • • 解码库超小,编译后只要几 KB,不会拖垮你的闪存

  • • 完全用 C 写的回调接口,你想怎么画点就怎么画

它解决了哪些尴尬?

  1. 1. 只能单色字:以前只能黑白两个等级?MCUFont 给你 0~15 级灰度,显示效果直接上档次。

  2. 2. 无字距、无行距:传统 ad-hoc 方案多是“瞎写”的,字跟字贴一起,谁也挤不下。它内置高级字距调整和自动换行。

  3. 3. 只能等宽:想用漂亮的比例字体?没问题,导入 ttf 后自动帮你生成 RLE 压缩位图。

安装和上手:一气呵成

  1. 1. 准备依赖:

    • • libfreetype

    • • cxxtest

  2. 2. 下载源码:

    git clone https://github.com/mcufont/mcufont.git
    cd mcufont
  • 3. 一键编译:

    make

    这步会生成 encoder、示例字体和 render_bmp demo。

  • 4. 导入字体:

    • • 在 PC 上运行 encoder,把 .ttf/.bdf 转成 .c/.h

  • 5. MCU 端调用:

    • • 引入 fonts.h 和 mcufont.h

    • • 实现两个回调:像素级绘图和字符渲染

    • • 调用 mf_render_aligned 一句代码,Hello World 就能跳屏了

    实战演示:几行代码炫起来

    #include "fonts.h"
    #include <mcufont.h>

    static void pixel_cb(int16_t x, int16_t y, uint8_t count, uint8_t alpha, void *st) {
      while (count--) {
        drawPixel(x++, y, alpha); // 自己实现的画点函数
      }
    }

    uint8_t char_cb(int16_t x0, int16_t y0, mf_char c, void *st) {
      return mf_render_character(&mf_rlefont_DejaVuSans12.font,
        x0, y0, c, &pixel_cb, st);
    }

    void main() {
      mf_render_aligned(&mf_rlefont_DejaVuSans12.font,
        0, 0, MF_ALIGN_LEFT, "Hello, MCUFont!", 15,
        &char_cb, NULL);
    }

    一次编译,多平台通用,省心又省事。

    优缺点一览

    优点

    缺点

    小巧:解码库仅 1~5 KB

    不支持运行时缩放

    高质量抗锯齿(16 级灰度)

    暂无子像素抗锯齿

    支持 TTF/BDF,自动 hinting

    动态效果(旋转、拉伸)需自己搞

    完全抽象回调,兼容各类显示硬件

    不如 FreeType 功能全面

    小结
    总的来说,MCUFont 就像给微控制器量身定做的一套高质感文字解决方案。安装简单,代码量少,效果就像“换壳”一样,一秒让你的 LCD/OLED 颜值翻倍。适合各种嵌入式项目,DIY 小玩意,甚至工业级人机界面都能用。
    心动不如行动,赶紧拉下来试试吧!

    项目地址:https://github.com/mcufont/mcufont

     

    发表评论