适用于小屏幕的 5x5 像素字体

查看原文 HN 讨论

文章摘要

Maurycy 在博客里发布了他手工设计的一款 5×5 像素的微型位图字体——mcufont。所有字符都装进 5 像素见方的格子,并能安全绘制在 6×6 的网格上(含字符间距)。它的设计灵感来自 lcamtuf 的 font-inline.h(5×6),后者又脱胎于 ZX Spectrum 的 8×8 字体。作者认为 5×5 是”不牺牲可读性”的最小尺寸:2×2 完全不可能;3×3 技术上能做但不可读;4×4 不足以画出真正的”E、M、W”;只有到 5×5,才刚好能让大多数小写字母比大写小一格,从而保留视觉上的大小写区分。

虽然有些字符其实只需要 3 或 4 列宽,但作者刻意保持等宽设计——这极大简化了渲染和排版:字符串在屏幕上的长度永远等于字符数 × 6 像素,再也不必担心”8978 比 1111 更长导致溢出”。整套字体只占 350 字节,非常适合 8 位单片机比如 AVR128DA28(仅 16KB RAM)。这类 MCU 便宜、低功耗、可靠,但显存吃紧——一块 384×288 屏就有 11 万像素,远超其内存。所以现实中更常用 160×128 或 128×64 的 OLED,而这种屏迫切需要专为像素绘制的高效字体。

文章后半部分作者还演示了把字体压缩到极限的情形:3×5(牺牲部分字符)、3×4(无法区分大小写)、3×3、2×3、3×2,乃至 2×2——后者已不再像字体而像”密码”。在真实硬件上,由于像素并非完美方块,字体反而会因为子像素结构产生类似”伪阴影”的柔化效果,让”e”和”g”等字符出乎意料地清晰。文末附上了源码(mcufont.h)以及参考链接。

HN 评论精华