tomzbj 发表于 2023-3-4 20:32:45

[原创] 史前技术: 制作小字库

本帖最后由 tomzbj 于 2023-3-4 21:15 编辑

我们需要显示汉字时一般要外挂一片SPIFLASH, 因为16点阵的HZK16也得200多k, 存到MCU的ROM里不太现实.
缺点是增加了成本, 多占PCB面积, 多占MCU一个SPI外设.

如果需要显示的汉字不多, 可以只把用到的汉字的字模挑出来做成小字库. 别跟我说取模软件, 取模取出来的烂怂字根本没法看.

写了个python程序, 可以把指定文件里的汉字筛选出来, 按unicode排序, 去掉重复的, 然后做出字库.
使用方法: py gen_smlib.py input.c > output.c

output.c里会有一个用到的汉字的unicode内码表, 根据要显示的字的内码找到索引值, 再按索引值找到相应的字模即可.

程序见附件,包括了11/12/14/16点阵的字库 (按unicode排序).



参考之前的贴子: https://www.amobbs.com/thread-5775880-1-1.html

实际显示效果如图:


lovejp1981 发表于 2023-3-4 21:07:25

牛,原来都是一个个去取模的,时间长了难免有重复的。

我是一个大白菜 发表于 2023-3-4 21:10:37

感谢大神分享

Rabbitoose 发表于 2023-3-4 21:24:57

感觉将来要用到,先收藏。

Huaan 发表于 2023-3-4 21:38:09

挺实用的工具
另外效果图最左边第九排开始乱码了?

tomzbj 发表于 2023-3-4 22:27:01

Huaan 发表于 2023-3-4 21:38
挺实用的工具
另外效果图最左边第九排开始乱码了?
(引用自5楼)

嗯, 所有这几个字库都缺了西里尔字母和希腊字母, 最左边的HZK11还缺了假名、序号、特殊符号,基本光剩汉字了。

这几个字库我是用GB2312的转成UNICODE顺序排列的,所以还是只有GB2312的6000多个字,勉强够用。以后有机会了再做完整的吧~

智涅 发表于 2023-3-4 23:07:44

我一直以为用字库和取模的是一样的

AWEN2000 发表于 2023-3-5 06:24:56

用汉字内码排序为好,程序字符串中汉字是2字节内码表示的。

饭桶 发表于 2023-3-5 08:14:40

9.9元LED屏软件常用的

powerlabor001 发表于 2023-3-5 09:24:25

先收为敬。

tomzbj 发表于 2023-3-5 09:25:27

AWEN2000 发表于 2023-3-5 06:24
用汉字内码排序为好,程序字符串中汉字是2字节内码表示的。
(引用自8楼)

你说的2字节内码不是GB2312/GBK吧。。。现在是2023年了,早该统一用utf-8了好吧?
utf-8转unicode非常容易的,有简单的公式。

tomzbj 发表于 2023-3-5 09:27:46

智涅 发表于 2023-3-4 23:07
我一直以为用字库和取模的是一样的
(引用自7楼)

字库只有固定的几种点阵啊,我这里有11,12,14,16的
此外就是24和32了,这两种就可以支持不同字体了,仿宋楷体什么的

矢量字库也可能自带几种点阵字体,不一定有,取模软件也不一定支持。

duxingkei 发表于 2023-3-5 10:00:05

我以前也用python做过取模的脚本,每个字都可以形象的定义显示效果,方便查看,很久了,好像发过帖子。
前段时间看到 esphome支持中英文文字在TFT屏上的显示,也是直接在选定的字体直接取模需要的文字,不需要的不取,也蛮好的
页: [1]
查看完整版本: [原创] 史前技术: 制作小字库