硬汉嵌入式论坛

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

[emWin] 关于stemwin 显示TTF矢量字体的若干问题

[复制链接]

2

主题

134

回帖

140

积分

初级会员

积分
140
发表于 2018-1-13 17:48:28 | 显示全部楼层 |阅读模式
本帖最后由 hanzixiangel 于 2018-1-13 17:52 编辑

        使用的是st官方编译的STemWin 5.40 ARGB库, 开发环境为MDK 5.24   经过移植和修改可以显示TTF矢量字体   但是出现了如下几个问题
一:显示效果并没有达到抗锯齿的效果   感觉还没有点阵字库的效果好  锯齿感特别明显
如下图:
         TTF1.bmp TTF3.bmp
     对比安富莱官方pdf里的图片差别较大  可以明显看到汉字的锯齿;

     安富莱官方pdf截图:
QQ截图20180113173843.png

二:测试发现有些字库并不明显示出汉字  打开字库发现里面是包含汉字的  但是并不能显示出来  只能显示英文字符
   如下图:

   

有汉字 但是不能显示

有汉字  但是不能显示


这种字体大小都小于1M  小的只有300多K   不知道什么原因导致不能显示的

三:测试发现显示TTF字体需要较长时间  测试发现加载一个官方安富莱测试例程界面需要2s左右的时间   加载时间太长  具体原因未知  


   本人遇到的问题如上,具体原因没有找到,希望硬汉大哥以及各位大牛帮忙分析分析,小弟在此谢过;






回复

使用道具 举报

2

主题

134

回帖

140

积分

初级会员

积分
140
 楼主| 发表于 2018-1-13 17:53:29 | 显示全部楼层
@eric2013  硬汉大哥  帮忙分析分析  谢谢  
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107604
QQ
发表于 2018-1-14 11:41:08 | 显示全部楼层
不好意思楼主,刚顾上回复你。
1.  要使用抗锯齿API函数。GUI_TTF_CreateFontAA(&Font16, &Cs0);
GUI_TTF_CreateFontAA(&Font24, &Cs1);
GUI_TTF_CreateFontAA(&Font32, &Cs2);
GUI_TTF_CreateFontAA(&Font48, &Cs3);
GUI_TTF_CreateFontAA(&Font72, &Cs4);
GUI_TTF_CreateFontAA(&Font120, &Cs5);

2. 有些字库的确是显示有问题。你可以加大矢量字库用的动态存储空间试试,我们的例子是加大heap大小。
3. 你说的加载时间是从那一刻开始的,是指的SDRAM已经从SD卡加载了矢量字库后吗,如果是的话,估计你的底层优化有问题。
回复

使用道具 举报

2

主题

134

回帖

140

积分

初级会员

积分
140
 楼主| 发表于 2018-1-14 22:57:55 | 显示全部楼层
eric2013 发表于 2018-1-14 11:41
不好意思楼主,刚顾上回复你。
1.  要使用抗锯齿API函数。GUI_TTF_CreateFontAA(&Font16, &Cs0);
GUI_TTF ...

谢谢硬汉大哥  果然是创建字体的问题  第一个问题解决了   

000000.bmp

第二个问题今天也找到了答案  原因是那些只有300K的字体根本不包含汉字  所以显示不出来

QQ截图20180114224638.png

实际测试几种不包含中文字体的字库

183330.bmp 183508.bmp 183858.bmp
确定





至于第三个问题目前还没找原因所在   慢的地方是从SDRAM显示汉字的时候   是在创建完字体之后  另外已经使用了外部的SDRAM作为TTF的内存  修改了ftstdlib.h内存管理代码  如下:


  /**********************************************************************/
  /*                                                                    */
  /*                        memory allocation                           */
  /*                                                                    */
  /**********************************************************************/
#include "malloc.h"
//#define ft_scalloc   calloc
//#define ft_sfree     free
//#define ft_smalloc   malloc
//#define ft_srealloc  realloc

#define ft_scalloc   SRAMEXcalloc
#define ft_sfree     SRAMEXfree
#define ft_smalloc   SRAMEXmalloc
#define ft_srealloc  SRAMEXrealloc

这部分应该没有问题  测试如果不使用外部SDRAM作为内存  大的汉字就会创建失败  我用st官方的例程再测试一下  看看加载速度如何


回复

使用道具 举报

2

主题

134

回帖

140

积分

初级会员

积分
140
 楼主| 发表于 2018-1-15 15:28:32 | 显示全部楼层
eric2013 发表于 2018-1-14 11:41
不好意思楼主,刚顾上回复你。
1.  要使用抗锯齿API函数。GUI_TTF_CreateFontAA(&Font16, &Cs0);
GUI_TTF ...

硬汉大哥  使用st官方是stmf469i-disc开发板和官方例程进行修改测试发现创建字体都失败  最小的字体都失败  使用的是同样的方法  包括内存使用都一样   不一样的就是开发环境   使用的是st4stm32   经调试发现是这出现的问题
  //
  // Request face object from cache
  //
  if (FTC_Manager_LookupFace(_FTContext.cache_manager, face_id, &face)) {
    return 1;
  }
从这return 1出错了  具体的原因还待查找   
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107604
QQ
发表于 2018-1-16 01:47:24 | 显示全部楼层
hanzixiangel 发表于 2018-1-15 15:28
硬汉大哥  使用st官方是stmf469i-disc开发板和官方例程进行修改测试发现创建字体都失败  最小的字体都失 ...

不出意外的话,应该是底层优化或者配置有问题,没有发挥最大性能。
回复

使用道具 举报

2

主题

134

回帖

140

积分

初级会员

积分
140
 楼主| 发表于 2018-1-16 10:42:47 | 显示全部楼层
eric2013 发表于 2018-1-16 01:47
不出意外的话,应该是底层优化或者配置有问题,没有发挥最大性能。

硬汉大哥   您那测试需要多长时间  从创建完字库到显示出来  不算读取字库的时间  谢谢
回复

使用道具 举报

5

主题

109

回帖

124

积分

初级会员

积分
124
发表于 2018-1-28 17:33:23 | 显示全部楼层
好贴
回复

使用道具 举报

2

主题

134

回帖

140

积分

初级会员

积分
140
 楼主| 发表于 2018-5-30 16:15:17 | 显示全部楼层
eric2013 发表于 2018-1-16 01:47
不出意外的话,应该是底层优化或者配置有问题,没有发挥最大性能。

硬汉大哥 最近有在测试矢量字体  准备用于实际项目  emwin底层已经优化完了  但是发现加载ttf矢量字体的时候还是需要较长时间才能显示  比如打开一个包含矢量字体的界面可能需要消耗1s左右  时间太长了  感觉很卡  不知道您的例程有没有这样的问题    您能帮忙测试一下吗  我手头的开发板在同事那   谢谢  非常感谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107604
QQ
发表于 2018-5-31 10:52:47 | 显示全部楼层
hanzixiangel 发表于 2018-5-30 16:15
硬汉大哥 最近有在测试矢量字体  准备用于实际项目  emwin底层已经优化完了  但是发现加载ttf矢量字体的 ...

已经帮你测试了,使用的是我们V6板子的矢量字库例子,速度很快的。

即这个帖子里面的例子:
http://www.armbbs.cn/forum.php?m ... &extra=page%3D1
回复

使用道具 举报

2

主题

134

回帖

140

积分

初级会员

积分
140
 楼主| 发表于 2018-5-31 14:57:59 | 显示全部楼层
eric2013 发表于 2018-5-31 10:52
已经帮你测试了,使用的是我们V6板子的矢量字库例子,速度很快的。

即这个帖子里面的例子:

多谢硬汉大哥      您有没有大概统计一下加载完之后多长时间能出现界面?  我测试发现如果两个界面来回切的话  只有第一次比较卡  时间会稍微长一些   第二次来回切的时候就不会卡了  非常块   分析认为第一次需要计算ttf字体  可能消耗时间   第二次快是因为要显示的字体已经计算并加载到内存了  所以快   从我测试来看只能这么分析
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107604
QQ
发表于 2018-6-1 02:49:33 | 显示全部楼层
hanzixiangel 发表于 2018-5-31 14:57
多谢硬汉大哥      您有没有大概统计一下加载完之后多长时间能出现界面?  我测试发现如果两个 ...

已经帮你测试了,首次创建是600ms,这个时间是由你显示内容多少决定的,我这里几乎是整屏显示,800*480分辨率
以后再创建同样的窗口100-200ms。

QQ截图20180601025126.png
回复

使用道具 举报

2

主题

134

回帖

140

积分

初级会员

积分
140
 楼主| 发表于 2018-6-1 12:31:44 | 显示全部楼层
eric2013 发表于 2018-6-1 02:49
已经帮你测试了,首次创建是600ms,这个时间是由你显示内容多少决定的,我这里几乎是整屏显示,800*480分 ...

gif5新文件.gif
谢谢硬汉大哥  看来第一次显示ttf字体确实需要时间去计算ttf字体   为了验证我的想法  我做了一个测试   两次显示同样的内容   第一次显示的时候很明显显示有间隔  然后清屏第一次去显示同样的内容    结果第二次显示非常快  一下子全部显示  效果如上gif图   代码截图如下:
微信图片_20180601123046.png

回复

使用道具 举报

2

主题

134

回帖

140

积分

初级会员

积分
140
 楼主| 发表于 2018-6-1 12:41:32 | 显示全部楼层
eric2013 发表于 2018-6-1 02:49
已经帮你测试了,首次创建是600ms,这个时间是由你显示内容多少决定的,我这里几乎是整屏显示,800*480分 ...

然后我有做了两个界面的切换  发现两个界面第一次切换速度确实会很慢   第二次切换就非常流畅了  把存储设备和三缓存关闭可以明显的看到第一次切换的时候ttf字体是一行一行的显示的  第二次切换的时候就可以一次性显示了     


另外一个测试时我先把界面需要显示的文字在没有建立界面之前先显示一遍   然后再创建界面显示  这样的话界面来回切换就不会出现卡的情况了 ,拍了一个小视频,发给你了 ,您可以看一下

至于为什么会这样推测还是因为第一次显示ttf字体需要时间去计算   计算完的ttf字体已经保存到缓存区了  所以第二次显示就非常快了   我查了一下官方有关ttf字体的函数  里面确实有一个关于设置缓存空间的api,如下:
QQ截图20180601123912.png
这个缓存空间目前我设置了1MB,使用外部SDRAM

现阶段的出现方法就是再显示界面之前先把界面需要显示的文字全部显示一遍  这样的第一次显示界面和切换界面就不会卡顿了;  不知道硬汉大哥有没有更好的办法;  谢谢!

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107604
QQ
发表于 2018-6-2 01:45:30 | 显示全部楼层
hanzixiangel 发表于 2018-6-1 12:41
然后我有做了两个界面的切换  发现两个界面第一次切换速度确实会很慢   第二次切换就非常流畅了  把存储 ...

总结一些群群内讨论的结果。

由于楼主用的是16位SDRAM,使用我们V6板子的32位SDRAM测试,效果好很多。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-8 00:46 , Processed in 0.353928 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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