搜索
bottom↓
回复: 14

【修复】给开源墨水屏修复抬头字体,并更新预览工具

[复制链接]

出200入2365汤圆

发表于 2021-2-21 08:33:36 | 显示全部楼层 |阅读模式
首先感谢大家的支持,开源墨水屏有了良好的生态应用。

前几天刚入手墨水屏的时候,版主有提到抬头标题栏(日期/版本/名称/电压)使用 12px 字体有问题,
表现为:标题栏字体显示残缺,字母笔划不全。

今天尝试折腾一下,不想竟然修复了这个 BUG,特来分享。


【原理】
研究墨水屏源码可知,屏显字体采用 ROM 表格的方式进行存储。具体字体文件:

fontcn8.bin : 应该是某 8px 高字体,具体用处没细看;
fontcn12.bin : 高 12px 的 Unicode 字体,用于抬头标题栏显示;
fontcn16.bin : 高 16px 的 Unicode 字体,用于显示中文及正文数字;
fontnum48.bin: 高 48px 的数字字体,用于显示时钟,已经折腾了一圈了。

抬头标题栏笔划缺失,应该和 fontcn12.bin 字模有关系,需要首先了解字模存储格式。

研究源码可知,fontcn12.bin 当中存储的是 12px*12px 的 Unicode 字符字模,
在 1bpp 颜色位深度下,12px*12px 所需存储空间在字节对齐后需要:2Byte*12= 24Byte,
进一步查看 fontcn12.bin 文件尺寸:1,572,864 Byte = 65536 * 24 Byte.

很显然版主并没有刻意给字模文件做压缩编码,这个字模文件刚好对应 Unicode(2Byte) 下的 65536 个字符。
这一点在 Arduino 的 u8g2 库中就很蛋疼,字模数据都压缩了,想改基本需要重新编译。

WinHex 扣出 fontcn12.bin : 1*24Byte 位置的编码,共 24 字节,人肉在记事本上画一画字模:




很显然就是这么回事,这相当于 Unicode(0x0001) 位置的不可打印字符方块而已。至此可以确认:

a. fontcn12.bin 存储了 65536 个 12px*12px (24Byte) 的字模文件,顺序应该与 Unicode 码一致;
b. fontcn12.bin 存储 '0'-'9' 的起始位置为: 24 * 0x30 = 0x480
c. fontcn12.bin 存储 'A'-'Z' 的起始位置为: 24 * 0x41 = 0x618
d. fontcn12.bin 存储 'a'-'z' 的起始位置为: 24 * 0x61 = 0x918、


【症结】
至于为何显示的字形不全,仔细研究代码发现:
打印 fontcn12.bin 字体时,如果遇到了 ASCII 字符,则水平方向字符间距为 6px,其他 Unicode 则是 12px.
这个逻辑类似于非等宽字体,应该是用于节省屏幕空间。

但由于 fontcn12.bin 是 12px*12px 取模的缘故,一旦字形笔划位于 12px 右半侧,就会被相邻字符遮挡,造成笔划缺失。
如下图所示,ch2 字形遮挡了 ch1 字形的右半边:




【手绘】
既然已经确认问题症结,接下来任务就是制作一系列字模,使数字、字母都填进 6px*12px 区域,并封装成 12px*12px 字模数据。
由于分辨率并不高,这里选择拿记事本手绘。使用两个全角字符方块表示像素,绘制了如下的 ASCII 字模:




取模软件不想找了,这几个字模口算就是了,在 WinHex 当中直接编辑计算好的位置,得到了最终的字体文件。


【工具】
在绘制的过程中,因为是口算字模,难免会有出错的情况。于是和之前折腾时钟一样,需要一套 12px 字体预览工具。
拿之前的 VS 代码改一改,显示 12px 字体当中的 0-9, A-Z, a-z 即可,尺寸为 6px*12px,其余字形不关心。

工具APP 和源码发来:



最终修复好的字体文件也发来:




【效果】
在预览器中对比修复前后的字形,可以看到修复前大多数 ASCII 都超过了 6px 的限制,导致显示残缺。
修复后的字体都能正确挤进左侧 6px 空间,确保显示不重叠。




接下来实地烧录。由于已知字体烧录位置,直接在下载工具中指定修复好的字体、烧录位置进行烧录:




运行效果如下,上图为修复前缺笔画,下图为修复后,基本清晰:




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

以上,给开源墨水屏修复了抬头字体,不再缺少笔划;并更新了字体预览工具(12px版本),分享来供大家参考。

最后祝大家折腾愉快!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出10入18汤圆

发表于 2021-2-21 08:40:31 来自手机 | 显示全部楼层
大写的赞

出0入0汤圆

发表于 2021-2-21 08:51:35 | 显示全部楼层
大神,膜拜一下

出0入0汤圆

发表于 2021-2-21 08:52:45 | 显示全部楼层
厉害了,又成功修复一个bug

上手的墨水屏应该拿出来折腾了,哈哈

出0入85汤圆

发表于 2021-2-21 13:15:05 | 显示全部楼层
weiwei4 发表于 2021-2-21 08:52
厉害了,又成功修复一个bug

上手的墨水屏应该拿出来折腾了,哈哈

能否把两种字体(fontnum48.bin和fontnum12.bin)打成一个包,谢谢。

出0入0汤圆

发表于 2021-2-21 16:14:32 | 显示全部楼层
楼主威武,谢谢楼主

出0入0汤圆

发表于 2021-2-21 19:47:43 | 显示全部楼层
楼主威武,顶一个...

出200入2365汤圆

 楼主| 发表于 2021-2-21 19:56:38 | 显示全部楼层
网络孤客 发表于 2021-2-21 13:15
能否把两种字体(fontnum48.bin和fontnum12.bin)打成一个包,谢谢。

莫非是每天只能下一个包?  拿去吧:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入85汤圆

发表于 2021-2-22 08:50:26 | 显示全部楼层
t3486784401 发表于 2021-2-21 19:56
莫非是每天只能下一个包?  拿去吧:

是的是的,谢谢。

出0入85汤圆

发表于 2021-2-22 11:22:19 | 显示全部楼层
t3486784401 发表于 2021-2-21 19:56
莫非是每天只能下一个包?  拿去吧:

喜欢FakeHope字体,楼主打包的是LED。
不再劳烦楼主了,自己动手丰衣足食。

顺带把16点阵的宋体换成楷体。
效果如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2021-2-22 11:32:45 | 显示全部楼层
奇怪,难道就我的右上角天气情况是乱码吗?看大家的天气情况都是正常的,我的就始终是不正常。

出200入2365汤圆

 楼主| 发表于 2021-2-22 20:55:53 来自手机 | 显示全部楼层
网络孤客 发表于 2021-2-22 11:22
喜欢FakeHope字体,楼主打包的是LED。
不再劳烦楼主了,自己动手丰衣足食。


这就尴尬了,我有时一天会传好多个包。建议赞助下论坛

出200入2365汤圆

 楼主| 发表于 2021-2-22 20:57:36 来自手机 | 显示全部楼层
老魏 发表于 2021-2-22 11:32
奇怪,难道就我的右上角天气情况是乱码吗?看大家的天气情况都是正常的,我的就始终是不正常。 ...


建议查看串口日志

出10入18汤圆

发表于 2021-2-23 07:48:08 | 显示全部楼层
老魏 发表于 2021-2-22 11:32
奇怪,难道就我的右上角天气情况是乱码吗?看大家的天气情况都是正常的,我的就始终是不正常。 ...

你贴一下复位到刷新完毕的串口log日志,你小程序设置的地理坐标。

出0入0汤圆

发表于 2021-3-8 19:44:36 | 显示全部楼层
赞 谢谢楼主
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号 )

GMT+8, 2022-7-3 03:41

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表