查看: 986|回复: 3

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

[复制链接]
  • TA的每日心情
    擦汗
    2019-7-29 00:08
  • 签到天数: 47 天

    [LV.5]常住居民I

    发表于 2019-4-30 01:04 | 显示全部楼层 |阅读模式
    本帖最后由 t3486784401 于 2019-4-30 01:08 编辑

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

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

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

    首先是原图,来自 B 站截屏(弹幕关闭):
    1-ORIG.jpg


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


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


    数组拷贝到 Arduino 工程里,drawXBMP 调用之:
    2019-04-30_010619.png


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


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

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

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

    欢迎大家指点: )

  • TA的每日心情
    擦汗
    2019-7-29 00:08
  • 签到天数: 47 天

    [LV.5]常住居民I

     楼主| 发表于 2019-4-30 01:52 | 显示全部楼层
    奈何col 发表于 2019-4-30 01:20
    看来你需要一款取模软件
    https://www.arduino.cn/thread-42174-1-1.html

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

    我这几乎是手调完成了局部阈值的二值化,84x48 的二值图像真的太马赛克了
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 2019-4-30 01:20 | 显示全部楼层
    看来你需要一款取模软件
    https://www.arduino.cn/thread-42174-1-1.html
    如果以上内容对你有帮助,你可以通过打赏支持作者
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    Arduino lcd屏幕亮了但是不显示字符
    Arduino lcd屏幕亮了但是
    Arduino的lcd屏亮了但是上面没有字符显示,串进去的滑动变阻器也旋过了,但是还是没有
    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    [限时福利]5分钟带你快速了解新一代开发板:M5STACK
    [限时福利]5分钟带你快速
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    【Arduino】108种传感器模块系列实验(98)---L298N电机驱动板
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    两个ESP8266通过云端实现远程数据交互
    两个ESP8266通过云端实现
    原理简述:利用发布订阅模式。一个ESP8266作为消息发布者,另一个ESP8266作为消息订阅
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表