做了一个emWin字体生成器
本帖最后由 allyzc 于 2018-7-13 16:38 编辑最近做了一个emWin的字体生成器,支持多国文字,支持抗锯齿,现共享给有需要的伙伴。
工具使用说明:
1、左侧输入待转换的文字,支持输入多国文字,支持抗锯齿。
2、选择合适的字体和大小。
3、设置字模的高度和偏移与抗锯齿,1表示无抗锯齿。
4、设置编码格式,并输入字体名字。
5、点击开始转换。
6、保存文件或是直接复制代码到C文件。
unicode编码生成的字体怎么用:
1、因本字体使用unicode编码,所以在用到文字的.c文件,需保存为UTF-8编码,可使用记事本打开.c文件,文件另存,选UTF-8编码即可。
2、emWin需开始UTF-8编码的支持,方法为在GUI_Init();后面调用GUI_UC_SetEncodeUTF8();即可。
3、因.c文件保存为UTF-8编码后,MDK编译可能出错,打开配置工程,切换C/C++选项卡,在Misc Controns里面追加--locale=english即可。
GBK编码生成的字体怎么用:
1、因本字体使用GBK编码,所以确保在用到文字的.c文件编码为ANSI即可,可使用记事本打开.c文件,文件另存,选ANSI编码即可。
2、emWin无需调用GUI_UC_SetEncodeUTF8(),默认即是ANSI。
注:如需多国文字不建议用GBK,会丢失文字,如只需中英文则没有问题。
外部字库使用方法
生成外部字库
1、外部字体需要提供读取字模驱动函数,通过设置-设置外部字体读取函数,软件会加载到代码中。
2、如生成字库时不提供函数,也可以自己在代码中提供。
3、生成方法如上相同。
使用方法
1、外部字库会生成2个文件,一个bin文件即字模文件,一个C文件即描述文件。
2、bin文件放到外部存储,C文件添加到工程。
3、编写读取函数,按提供参数偏移,大小来读取即可。
注:外部字体同样支持unicode或GBK编码。
类型说明:
1、内部字体:全部信息保存在C文件,存储在ROM区。
2、外部字体,适用于FLASH:这种类型数据存在外部如FLASH,字体描述CharInfo放在ROM,适用于有FLASH而没有大内存的情况,比如STM32F407芯片。
3、外部字体,适用于SDRAM:这种类型全部存到外部,用到时全部读到SDRAM,查找字符要寻指,所以只适用于SDRAM。
4、外部字体,类似XBF,最优:这种类型信息全部存到外部,适用于FLASH,也适用于SDRAM,每个字符只要查表一次,速度快,外部字体建议使用这种。
更新记录:
V0.1
1、初始版本
V0.2
1、加入GBK编码选择,可选择生成unicode或GBK的字库。
2、优化了一下生成抗锯齿字模的方法,生成的字体更清晰一些。
V0.3
1、增加生成外部字体,外部字体只支持bpp1和bpp4,bpp2没做,感觉没有必要。
V0.4
1、因V0.3版的外部字体,字体描述CharInfo部分还是保存在C文件即内部,当文字多了后还是会占用很多ROM空间。所以0.4版增加一种类型,即全部外置,用到时全部读到SDRAM。
2、增加参数保存。
3、增加设置抗锯齿选项。
厉害! 666,感谢楼主分享的好软件。 一直是看贴不了贴的,这不刷一下存在感:lol 可以做GBK编码或者GB2312编码的吗? 简单好用。。。。
可惜不能选字体。。。比如仿宋,楷体,隶书,,,
比emwin的操作通俗易懂。 爱恋之燕 发表于 2018-7-3 09:41
可以做GBK编码或者GB2312编码的吗?
GBK或GB2312应该可以,这个要看一下 caicaptain2 发表于 2018-7-3 16:22
简单好用。。。。
可惜不能选字体。。。比如仿宋,楷体,隶书,,,
比emwin的操作通俗易懂。
能选字体的啊,看截图,左下角第一个BUTTON就是选字体 楼主赞!
能否生成GB2312编码的外部字库?
emWin的字体软件只能生成 unicode 编码的外部字库。:) abl 发表于 2018-7-4 13:25
楼主赞!
能否生成GB2312编码的外部字库?
emWin的字体软件只能生成 unicode 编码的外部字库。
刚增加了内部的GB2312,生成外部的等下个版本加入 这么快都升级第2版{:8:} 666,升级好快 这个工具很cool额 感谢楼主分享的好软件 已增加生成外部字体 厉害,过两天我也专门测试下。{:8:} eric2013 发表于 2018-7-6 17:59
厉害,过两天我也专门测试下。
刚好有兴趣做,就完善了下,现在基本满足各种需求了。{:16:} allyzc 发表于 2018-7-6 18:13
刚好有兴趣做,就完善了下,现在基本满足各种需求了。
方便写个功能介绍不,这次周报帮你宣传下:handshake eric2013 发表于 2018-7-6 18:27
方便写个功能介绍不,这次周报帮你宣传下
多谢老大:handshake allyzc 发表于 2018-7-7 09:16
多谢老大
已经收到文件,明天就发一下:handshake 超酷!!!持续关注!
建议后续版本加入bmp图片代码生成。 caicaptain2 发表于 2018-7-8 10:31
超酷!!!持续关注!
建议后续版本加入bmp图片代码生成。
官方的图片工具就很好用了啊 厉害了 厉害 {:8:} 打洞者 发表于 2018-7-9 09:21
厉害
用Qt做的? 打洞者 发表于 2018-7-9 09:23
用Qt做的?
对,是QT。 好东西,很棒! allyzc 发表于 2018-7-9 10:25
对,是QT。
:handshake 本帖最后由 abl 于 2018-7-9 13:57 编辑
楼主好!
简单的测试了一下外部字体,有两个问题:
1 . 字体缓冲区大小计算不对
static unsigned char g_font_buf;//软件已计算好BUFF大小,无需更改BUFF大小
(当前字体20号,每行4字节,字模高24),但是如果字模高度改成27,则计算又对了?
2. 抗锯齿外部字体函数static void myFont24_Draw(int x0, int y0, int XSize, int YSize, int BytesPerLine, const U8 *pData) {
其中 pfSetPixelAA = (GUI_pContext->TextMode && GUI_TM_TRANS) ? 这一句 “&&” 应为 “&”。
楼主辛苦:)
又想到一个问题, 对外部字库, 能否把 GUI_CHARINFO 这个大数组也放到bin文件中, 这个数组要占用接近80k字节的rom空间,
如果有多个字库,程序空间有点吃不消啊。
abl 发表于 2018-7-9 13:14
楼主好!
简单的测试了一下外部字体,有两个问题:
1 . 字体缓冲区大小计算不对
多谢你的建议啊,如果更新下个版本会加上 楼主好强!好定西啊!{:8:} L、L 发表于 2018-7-9 15:23
楼主好强!好定西啊!
好东西..激动过头打错了..
我在使用 emWin字体生成器 V0.3 生成 unicode编码的字库,在使用中出现上图中 期望显示“你好我 emWin” 实际却显示为 “你好房emWin”,第二句的首字 ‘宁’ 未显示出来
打洞者 发表于 2018-7-9 16:28
我在使用 emWin字体生成器 V0.3 生成 unicode编码的字库,在使用中出现上图中 期望显示“你好我 emWin ...
我只有VC6.0,不支持UTF8,不能帮你测试,我在板子上测试没有问题 allyzc 发表于 2018-7-9 18:30
我只有VC6.0,不支持UTF8,不能帮你测试,我在板子上测试没有问题
好我在板子试试 外部字体支不支持抗锯齿? 爱恋之燕 发表于 2018-7-10 14:14
外部字体支不支持抗锯齿?
支持啊,看一下我的说明啊 你好楼主,我又来麻烦你了:)
GUI_FONT_PROP 这些数组,连续编码的汉字应该放到一起,现在时每个字单独一个,如此增加了很多查表次数,效率很低。
static const GUI_FONT_PROP FontGBK27DX_Prop6746 = {
0xf7d3, /* start */
0xf7d3, /* end */
&FontGBK27DX_CharInfo,
&FontGBK27DX_Prop6747,
};
abl 发表于 2018-7-10 15:45
你好楼主,我又来麻烦你了
GUI_FONT_PROP 这些数组,连续编码的汉字应该放到一起,现在时每个字单独一个 ...
如果多文字是不适合用这种,如果是自定义字库,很难保证汉字连续,想要查表少,最好的方法是参数XBF 字体显示效果还是不错的,但是有个问题,有的地方汉字会往上跑