allyzc 发表于 2018-7-2 17:39:57

做了一个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、增加设置抗锯齿选项。






eric2013 发表于 2018-7-2 17:42:11

厉害!

byccc 发表于 2018-7-2 17:44:06

666,感谢楼主分享的好软件。

allyzc 发表于 2018-7-2 17:50:55

一直是看贴不了贴的,这不刷一下存在感:lol

爱恋之燕 发表于 2018-7-3 09:41:55

可以做GBK编码或者GB2312编码的吗?

caicaptain2 发表于 2018-7-3 16:22:41

简单好用。。。。
可惜不能选字体。。。比如仿宋,楷体,隶书,,,
比emwin的操作通俗易懂。

allyzc 发表于 2018-7-3 17:35:35

爱恋之燕 发表于 2018-7-3 09:41
可以做GBK编码或者GB2312编码的吗?

GBK或GB2312应该可以,这个要看一下

allyzc 发表于 2018-7-3 17:36:22

caicaptain2 发表于 2018-7-3 16:22
简单好用。。。。
可惜不能选字体。。。比如仿宋,楷体,隶书,,,
比emwin的操作通俗易懂。

能选字体的啊,看截图,左下角第一个BUTTON就是选字体

abl 发表于 2018-7-4 13:25:55

楼主赞!
能否生成GB2312编码的外部字库?
emWin的字体软件只能生成 unicode 编码的外部字库。:)

allyzc 发表于 2018-7-4 14:30:07

abl 发表于 2018-7-4 13:25
楼主赞!
能否生成GB2312编码的外部字库?
emWin的字体软件只能生成 unicode 编码的外部字库。

刚增加了内部的GB2312,生成外部的等下个版本加入

eric2013 发表于 2018-7-5 01:10:46

这么快都升级第2版{:8:}

byccc 发表于 2018-7-5 09:35:20

666,升级好快

hanzixiangel 发表于 2018-7-5 10:23:37

这个工具很cool额

msyeh 发表于 2018-7-5 18:55:24

感谢楼主分享的好软件

allyzc 发表于 2018-7-6 17:57:27

已增加生成外部字体

eric2013 发表于 2018-7-6 17:59:50

厉害,过两天我也专门测试下。{:8:}

allyzc 发表于 2018-7-6 18:13:46

eric2013 发表于 2018-7-6 17:59
厉害,过两天我也专门测试下。

刚好有兴趣做,就完善了下,现在基本满足各种需求了。{:16:}

eric2013 发表于 2018-7-6 18:27:42

allyzc 发表于 2018-7-6 18:13
刚好有兴趣做,就完善了下,现在基本满足各种需求了。
方便写个功能介绍不,这次周报帮你宣传下:handshake

allyzc 发表于 2018-7-7 09:16:02

eric2013 发表于 2018-7-6 18:27
方便写个功能介绍不,这次周报帮你宣传下

多谢老大:handshake

eric2013 发表于 2018-7-7 10:59:59

allyzc 发表于 2018-7-7 09:16
多谢老大

已经收到文件,明天就发一下:handshake

caicaptain2 发表于 2018-7-8 10:31:10

超酷!!!持续关注!
建议后续版本加入bmp图片代码生成。

allyzc 发表于 2018-7-8 11:33:59

caicaptain2 发表于 2018-7-8 10:31
超酷!!!持续关注!
建议后续版本加入bmp图片代码生成。

官方的图片工具就很好用了啊

ztzjl2010 发表于 2018-7-9 09:02:52

厉害了                                       

打洞者 发表于 2018-7-9 09:21:15

厉害 {:8:}

打洞者 发表于 2018-7-9 09:23:06

打洞者 发表于 2018-7-9 09:21
厉害

用Qt做的?

allyzc 发表于 2018-7-9 10:25:08

打洞者 发表于 2018-7-9 09:23
用Qt做的?

对,是QT。

wcyingdream 发表于 2018-7-9 11:05:19

好东西,很棒!      

打洞者 发表于 2018-7-9 12:58:00

allyzc 发表于 2018-7-9 10:25
对,是QT。

:handshake

abl 发表于 2018-7-9 13:14:49

本帖最后由 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空间,
如果有多个字库,程序空间有点吃不消啊。

allyzc 发表于 2018-7-9 14:07:17

abl 发表于 2018-7-9 13:14
楼主好!
简单的测试了一下外部字体,有两个问题:
1 . 字体缓冲区大小计算不对


多谢你的建议啊,如果更新下个版本会加上

L、L 发表于 2018-7-9 15:23:56

楼主好强!好定西啊!{:8:}

L、L 发表于 2018-7-9 15:24:31

L、L 发表于 2018-7-9 15:23
楼主好强!好定西啊!

好东西..激动过头打错了..

打洞者 发表于 2018-7-9 16:28:36



我在使用 emWin字体生成器 V0.3 生成 unicode编码的字库,在使用中出现上图中 期望显示“你好我 emWin” 实际却显示为 “你好房emWin”,第二句的首字 ‘宁’ 未显示出来

allyzc 发表于 2018-7-9 18:30:08

打洞者 发表于 2018-7-9 16:28
我在使用 emWin字体生成器 V0.3 生成 unicode编码的字库,在使用中出现上图中 期望显示“你好我 emWin ...

我只有VC6.0,不支持UTF8,不能帮你测试,我在板子上测试没有问题

打洞者 发表于 2018-7-9 19:48:52

allyzc 发表于 2018-7-9 18:30
我只有VC6.0,不支持UTF8,不能帮你测试,我在板子上测试没有问题

好我在板子试试

爱恋之燕 发表于 2018-7-10 14:14:44

外部字体支不支持抗锯齿?

allyzc 发表于 2018-7-10 14:28:38

爱恋之燕 发表于 2018-7-10 14:14
外部字体支不支持抗锯齿?

支持啊,看一下我的说明啊

abl 发表于 2018-7-10 15:45:15

你好楼主,我又来麻烦你了:)
GUI_FONT_PROP 这些数组,连续编码的汉字应该放到一起,现在时每个字单独一个,如此增加了很多查表次数,效率很低。

static const GUI_FONT_PROP FontGBK27DX_Prop6746 = {
0xf7d3, /* start */
0xf7d3, /* end */
&FontGBK27DX_CharInfo,
&FontGBK27DX_Prop6747,
};

allyzc 发表于 2018-7-10 16:31:09

abl 发表于 2018-7-10 15:45
你好楼主,我又来麻烦你了
GUI_FONT_PROP 这些数组,连续编码的汉字应该放到一起,现在时每个字单独一个 ...

如果多文字是不适合用这种,如果是自定义字库,很难保证汉字连续,想要查表少,最好的方法是参数XBF

爱恋之燕 发表于 2018-7-10 21:31:54

字体显示效果还是不错的,但是有个问题,有的地方汉字会往上跑
页: [1] 2 3
查看完整版本: 做了一个emWin字体生成器