硬汉嵌入式论坛

 找回密码
 立即注册
查看: 42207|回复: 115
收起左侧

[emWin] 做了一个emWin字体生成器

  [复制链接]

9

主题

140

回帖

187

积分

初级会员

积分
187
QQ
发表于 2018-7-2 17:39:57 | 显示全部楼层 |阅读模式
本帖最后由 allyzc 于 2018-7-13 16:38 编辑

最近做了一个emWin的字体生成器,支持多国文字,支持抗锯齿,现共享给有需要的伙伴。

QQ截图20180712141850.png

工具使用说明:
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、增加设置抗锯齿选项。

emWin字体工具V0.4.rar (7.26 MB, 下载次数: 4174)




评分

参与人数 8金币 +196 收起 理由
ewrest + 5
peng1554 + 20
log上帝的骰子 + 10 很给力!
建伟 + 20
lifeng5478 + 1 很给力!
yanchao7788 + 20 很给力!
byccc + 20 666
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106431
QQ
发表于 2018-7-2 17:42:11 | 显示全部楼层
厉害!
回复

使用道具 举报

36

主题

2038

回帖

2146

积分

至尊会员

积分
2146
发表于 2018-7-2 17:44:06 | 显示全部楼层
666,感谢楼主分享的好软件。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

9

主题

140

回帖

187

积分

初级会员

积分
187
QQ
 楼主| 发表于 2018-7-2 17:50:55 | 显示全部楼层
一直是看贴不了贴的,这不刷一下存在感
回复

使用道具 举报

25

主题

287

回帖

367

积分

高级会员

积分
367
发表于 2018-7-3 09:41:55 | 显示全部楼层
可以做GBK编码或者GB2312编码的吗?
回复

使用道具 举报

332

主题

2031

回帖

3032

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3032
发表于 2018-7-3 16:22:41 | 显示全部楼层
简单好用。。。。
可惜不能选字体。。。比如仿宋,楷体,隶书,,,
比emwin的操作通俗易懂。
回复

使用道具 举报

9

主题

140

回帖

187

积分

初级会员

积分
187
QQ
 楼主| 发表于 2018-7-3 17:35:35 | 显示全部楼层
爱恋之燕 发表于 2018-7-3 09:41
可以做GBK编码或者GB2312编码的吗?

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

使用道具 举报

9

主题

140

回帖

187

积分

初级会员

积分
187
QQ
 楼主| 发表于 2018-7-3 17:36:22 | 显示全部楼层
caicaptain2 发表于 2018-7-3 16:22
简单好用。。。。
可惜不能选字体。。。比如仿宋,楷体,隶书,,,
比emwin的操作通俗易懂。

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

使用道具 举报

3

主题

22

回帖

31

积分

新手上路

积分
31
发表于 2018-7-4 13:25:55 | 显示全部楼层
楼主赞!
能否生成GB2312编码的外部字库?
emWin的字体软件只能生成 unicode 编码的外部字库。
回复

使用道具 举报

9

主题

140

回帖

187

积分

初级会员

积分
187
QQ
 楼主| 发表于 2018-7-4 14:30:07 | 显示全部楼层
abl 发表于 2018-7-4 13:25
楼主赞!
能否生成GB2312编码的外部字库?
emWin的字体软件只能生成 unicode 编码的外部字库。

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106431
QQ
发表于 2018-7-5 01:10:46 | 显示全部楼层
这么快都升级第2版
回复

使用道具 举报

36

主题

2038

回帖

2146

积分

至尊会员

积分
2146
发表于 2018-7-5 09:35:20 | 显示全部楼层
666,升级好快
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

2

主题

134

回帖

140

积分

初级会员

积分
140
发表于 2018-7-5 10:23:37 | 显示全部楼层
这个工具很cool额
回复

使用道具 举报

0

主题

7

回帖

7

积分

新手上路

积分
7
发表于 2018-7-5 18:55:24 | 显示全部楼层
感谢楼主分享的好软件
回复

使用道具 举报

9

主题

140

回帖

187

积分

初级会员

积分
187
QQ
 楼主| 发表于 2018-7-6 17:57:27 | 显示全部楼层
已增加生成外部字体
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106431
QQ
发表于 2018-7-6 17:59:50 | 显示全部楼层
厉害,过两天我也专门测试下。
回复

使用道具 举报

9

主题

140

回帖

187

积分

初级会员

积分
187
QQ
 楼主| 发表于 2018-7-6 18:13:46 | 显示全部楼层
eric2013 发表于 2018-7-6 17:59
厉害,过两天我也专门测试下。

刚好有兴趣做,就完善了下,现在基本满足各种需求了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106431
QQ
发表于 2018-7-6 18:27:42 | 显示全部楼层
allyzc 发表于 2018-7-6 18:13
刚好有兴趣做,就完善了下,现在基本满足各种需求了。

方便写个功能介绍不,这次周报帮你宣传下
回复

使用道具 举报

9

主题

140

回帖

187

积分

初级会员

积分
187
QQ
 楼主| 发表于 2018-7-7 09:16:02 | 显示全部楼层
eric2013 发表于 2018-7-6 18:27
方便写个功能介绍不,这次周报帮你宣传下

多谢老大
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106431
QQ
发表于 2018-7-7 10:59:59 | 显示全部楼层

已经收到文件,明天就发一下
回复

使用道具 举报

332

主题

2031

回帖

3032

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3032
发表于 2018-7-8 10:31:10 | 显示全部楼层
超酷!!!持续关注!
建议后续版本加入bmp图片代码生成。
回复

使用道具 举报

9

主题

140

回帖

187

积分

初级会员

积分
187
QQ
 楼主| 发表于 2018-7-8 11:33:59 | 显示全部楼层
caicaptain2 发表于 2018-7-8 10:31
超酷!!!持续关注!
建议后续版本加入bmp图片代码生成。

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

使用道具 举报

4

主题

39

回帖

130

积分

初级会员

积分
130
发表于 2018-7-9 09:02:52 | 显示全部楼层
厉害了                                         
回复

使用道具 举报

5

主题

109

回帖

124

积分

初级会员

积分
124
发表于 2018-7-9 09:21:15 | 显示全部楼层
厉害
回复

使用道具 举报

5

主题

109

回帖

124

积分

初级会员

积分
124
发表于 2018-7-9 09:23:06 | 显示全部楼层

用Qt做的?
回复

使用道具 举报

9

主题

140

回帖

187

积分

初级会员

积分
187
QQ
 楼主| 发表于 2018-7-9 10:25:08 | 显示全部楼层

对,是QT。
回复

使用道具 举报

29

主题

181

回帖

268

积分

高级会员

积分
268
发表于 2018-7-9 11:05:19 | 显示全部楼层
好东西,很棒!      
回复

使用道具 举报

5

主题

109

回帖

124

积分

初级会员

积分
124
发表于 2018-7-9 12:58:00 | 显示全部楼层
回复

使用道具 举报

3

主题

22

回帖

31

积分

新手上路

积分
31
发表于 2018-7-9 13:14:49 | 显示全部楼层
本帖最后由 abl 于 2018-7-9 13:57 编辑

楼主好!
简单的测试了一下外部字体,有两个问题:
1 . 字体缓冲区大小计算不对
     static unsigned char g_font_buf[72];//软件已计算好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空间,
如果有多个字库,程序空间有点吃不消啊。
回复

使用道具 举报

9

主题

140

回帖

187

积分

初级会员

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

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

使用道具 举报

0

主题

2

回帖

6

积分

新手上路

积分
6
发表于 2018-7-9 15:23:56 | 显示全部楼层
楼主好强!好定西啊!
回复

使用道具 举报

0

主题

2

回帖

6

积分

新手上路

积分
6
发表于 2018-7-9 15:24:31 | 显示全部楼层
L、L 发表于 2018-7-9 15:23
楼主好强!好定西啊!

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

使用道具 举报

5

主题

109

回帖

124

积分

初级会员

积分
124
发表于 2018-7-9 16:28:36 | 显示全部楼层
1.PNG

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

使用道具 举报

9

主题

140

回帖

187

积分

初级会员

积分
187
QQ
 楼主| 发表于 2018-7-9 18:30:08 | 显示全部楼层
打洞者 发表于 2018-7-9 16:28
我在使用 emWin字体生成器 V0.3 生成 unicode编码的字库,在使用中出现上图中 期望显示“你好我 emWin ...

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

使用道具 举报

5

主题

109

回帖

124

积分

初级会员

积分
124
发表于 2018-7-9 19:48:52 | 显示全部楼层
allyzc 发表于 2018-7-9 18:30
我只有VC6.0,不支持UTF8,不能帮你测试,我在板子上测试没有问题

好  我在板子试试
回复

使用道具 举报

25

主题

287

回帖

367

积分

高级会员

积分
367
发表于 2018-7-10 14:14:44 | 显示全部楼层
外部字体支不支持抗锯齿?
回复

使用道具 举报

9

主题

140

回帖

187

积分

初级会员

积分
187
QQ
 楼主| 发表于 2018-7-10 14:28:38 | 显示全部楼层
爱恋之燕 发表于 2018-7-10 14:14
外部字体支不支持抗锯齿?

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

使用道具 举报

3

主题

22

回帖

31

积分

新手上路

积分
31
发表于 2018-7-10 15:45:15 | 显示全部楼层
你好楼主,我又来麻烦你了
GUI_FONT_PROP 这些数组,连续编码的汉字应该放到一起,现在时每个字单独一个,如此增加了很多查表次数,效率很低。

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

回复

使用道具 举报

9

主题

140

回帖

187

积分

初级会员

积分
187
QQ
 楼主| 发表于 2018-7-10 16:31:09 | 显示全部楼层
abl 发表于 2018-7-10 15:45
你好楼主,我又来麻烦你了
GUI_FONT_PROP 这些数组,连续编码的汉字应该放到一起,现在时每个字单独一个 ...

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

使用道具 举报

25

主题

287

回帖

367

积分

高级会员

积分
367
发表于 2018-7-10 21:31:54 | 显示全部楼层
字体显示效果还是不错的,但是有个问题,有的地方汉字会往上跑
IMG_20180710_212725.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-20 09:30 , Processed in 0.449626 second(s), 35 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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