【原创】使用 U8G2 库显示 XBM 图片-Arduino中文社区 - Powered by Discuz! Archiver

t3486784401 发表于 2019-4-30 01:04

【原创】使用 U8G2 库显示 XBM 图片

本帖最后由 t3486784401 于 2019-4-30 01:08 编辑

最近焊了块 5110 的扩展板,没事就拿来研究 U8G2 库。尝试全屏打印图片时,
发现接口为 drawXBM/drawXBMP,于是就研究了一下。

XBM 图片格式居然是纯 C 代码的格式,也就是说图片本身就是一段 C 文本代码。
这个代码可以直接编译到 Arduino 的代码中(当然要指定 PROGMEM 定位到 FLASH 中),
于是就找了最近补番的一帧,各种抠图做了二值图,成功打印到了 5110 上。

在 U8G2 库代码的注视中了解到,使用 GIMP(Linux版PS)可以直接保存 XBM 文件。
刚巧手头一直在用这个软件(嫌PS太大还没完没了注册),也就尝试折腾了一下。

首先是原图,来自 B 站截屏(弹幕关闭):



之后使用 GIMP 进行抠图(之前一直用的 GIMP 居然可以支持另存 XBM):



二值图最后直接另存为 XBM 格式,记事本打开就是个 C 数组:



数组拷贝到 Arduino 工程里,drawXBMP 调用之:



最终效果还不错,不过 5110 屏幕像素不是正方,需要略微拉伸长度以抵消之:



工程代码就不贴了,U8G2 示例代码而已,这里说明一下函数有两个版本:
drawXBM:绘制内存 RAM 中 XBM 图像
drawXBMP:绘制 FLASH 中 XBM 图像(可以在UNO上节约宝贵内存)

--------------------------------------------------------------------------------------------

话说大家有没有什么好用的二值化软件/方法啊,这抠图再曲线调整再阈值的,真心心累。
莫非非要自己写一段大津阈值算法才能欢乐么...

欢迎大家指点: )

t3486784401 发表于 2019-4-30 01:52

奈何col 发表于 2019-4-30 01:20
看来你需要一款取模软件
https://www.arduino.cn/thread-42174-1-1.html

确实是好物,不过抠图还是不能偷懒,不然阈值后就整片黑/整片白了。

我这几乎是手调完成了局部阈值的二值化,84x48 的二值图像真的太马赛克了

奈何col 发表于 2019-4-30 01:20

看来你需要一款取模软件
https://www.arduino.cn/thread-42174-1-1.html

zjssun 发表于 2019-7-22 22:50

谢谢楼主
页: [1]
查看完整版本: 【原创】使用 U8G2 库显示 XBM 图片