目录
一、引言
说明:博主在进行TFT显示时需要显示中文字体,但是TFT库中不带有中文显示,或者显示不全,于是开展了自定义字体,最后得到字体.h文件,引用到项目中供TFT——eSPI库使用。其中一部分脚本放进我的仓库,需要的自行下载。
二、字体生成
1、字体下载
首先下载我们需要的字体,格式为.ttf格式,自行网上搜索字体下载,很多网站都提供下载,但是字体格式为.ttf格式。将字体下载到TFT库的自定义字体下,因为要使用TFT库提供的字体转换程序,如图一所示为下载完成的字体,同时也可以看到存放路径。
图一
2、字体转换
a、下载软件processing,下载完成后解压得到这样的文件夹。如图二所示。
图二
b、将需要的字转换为Unicode编码格式,使用在线工具,Unicode编码转换 - 站长工具本工具是Unicode编码转换,为您提供ASCII与Unicode互转,Unicode与中文互转,在文本框里输入要转换的内容,然后点击要转换的类型按钮,转换完成后即可看到对应的内容。https://tool.chinaz.com/tools/unicode.aspx
比如需要A则转换结果为如图三所示
图三
转换结果为\u0041,使用时写成0x0041,如果字较多可以使用word的替换功能将\u替换为0x
c、利用下载好的软件打开此文件,如图四所示。
图四
说明:String fontName = "PingFang-JianZhongHeiTi-2"; 这里填写下载好的字体名称。
String fontType = ".ttf";这里填写类型。
int fontSize = 20;字体大小
int displayFontSize = 20; 字体大小一致就可以。
unicodeBlocks这个数组下填写连续的字的编码,比如我想生成A-Z的字体,就写入0x0041(A),0x005a(Z),这样就会生成A-Z的字体了,只要是连续的就可以。
如果不连续的字的编码请放在specificUnicodes数组里面。
然后点击运行,则会输出字体文件并且显示出来。
3、字体编码
1、得到vlw格式文件,再通过在线工具转为16进制的编码。File to hex converterOn-line file to hexadecimal array converter.https://tomeko.net/online_tools/file_to_hex.php?lang=zh
2、 建立.h文件,并且新建数组,将所得编码放进数组。
至此就完成了自定义字体的制作了。
三、字体使用
引入头文件
#include "zh_front_20.h"
使用TFT库函数加载字体
tft.loadFont(font_20);
字体显示完成后使用TFT库函数卸载字体,不然内存占用量太大,如果程序大了,就无法正常运行了。
tft.unloadFont();
四、总结
整体通过测试,显示正常,如有疑问请留言。