教你理解单片机液晶屏绘图 XBM 格式

concefly 30cm2021-04-0833 次点击1 人收藏1 人感谢
在用单片机驱动小尺寸液晶屏绘图的时候,如果用 gui 库,就几乎一定要准备 xbm 格式的文件,供 gui 绘图使用。

---

## 太长不看版

xbm 格式是用文本编码二进制表示黑白图片的格式。

点击前往 [在线 XBM 格式生成器](https://tech.biko.pub/#/tool/xbm)

- 支持 lua、c 语言格式
- 支持在线载入图片、画布绘制
- 宽高可调、二值化阈值可调

---

xbm 是一种非常古老的图片文件格式,最早用于 [X Window System](https://en.wikipedia.org/wiki/X_Window_System),具有如下特性:

- 文本编码二进制
- 只能表示单色像素(黑白)
- 能直接编译到应用程序内

在用单片机驱动小尺寸液晶屏绘图的时候,由于片上算力和资源有限,把图片转换成 xbm 格式直接编译进固件是个很常见的操作。

举例一张最简单的 2x2 图片

![](https://tech.biko.pub/gw/assets/20210312120935.png)

它转换成 xbm 格式后,就会变成一串类 C 代码:

```c
#define image_bits_width 2;
#define image_bits_height 2;

const unsigned char image_bits = {‌ 0x06 };
```

是不是很熟悉的味道?没错,xbm 是 C 语言源文件,这意味着 **它们不是由图形显示程序读取,而是由 C 编译器读取**。

但你可能会问,例子中 4 像素的图片是怎么转换成 `{‌ 0x06 }` 字节数组的?像素序列和字节数组的对应关系是什么?

如下图所示:

![](https://tech.biko.pub/gw/assets/20210321125611.png)

1. 从左到右,从上到下,遍历像素
1. 激活像素记 1,非激活像素记 0,按 [大端模式](https://baike.baidu.com/item/%E5%A4%A7%E5%B0%8F%E7%AB%AF%E6%A8%A1%E5%BC%8F/6750542) 排列成二进制比特序列,不足 8 位则以 0 补齐
1. 以 `unsigned char` 数组表示上述二进制比特序列,即得 xbm 格式

---

由于目前能找到的 xbm 格式转换器不多,好用的更少,怎么办?当然是自己撸一个。

点击前往 [在线 XBM 格式生成器](https://tech.biko.pub/#/tool/xbm)

- 支持 lua、c 语言格式
- 支持在线载入图片、画布绘制
- 宽高可调、二值化阈值可调

---

参考:

- [X BitMap - Wikipedia](https://en.wikipedia.org/wiki/X_BitMap)
收藏 ♥ 感谢
暂无回复

登录注册 后可回复。