硬汉嵌入式论坛

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

[emWin] 怎样在STM32F4上显示矢量字体中的汉字

[复制链接]

3

主题

15

回帖

24

积分

新手上路

天宇

积分
24
发表于 2014-12-6 00:04:15 | 显示全部楼层 |阅读模式
        最近在 ”STM32F439+FreeRTOS+STemWin+文件系统“ 上做矢量字体显示。
        步骤:
               ①从电脑中复制一个字体文件“华文彩云.ttf”到U盘中。
               ②上电从U盘读取字体文件到SDRAM。
               ③使用STemWin的矢量字体驱动库对该字体文件进行GUI字体的创建。
               ④显示字符串“音频格式:mp3”。
        效果:我显示字符串“音频格式:mp3”时只显示了“          mp3”,没有显示出汉字。
        问题:显示汉字是是否不能直接使用 GUI_DispStringAt("音频格式:mp3", 0, 0) 了,我也尝试过启用UTF-8,然后将字符串转换成 UTF-8 进行显示,结果还是无法显示出汉字

        新手上路,求大神指教 !!

        源码如下:

static GUI_HMEM hMem_type = Null;
static char *_acBuffer = Null;
static GUI_TTF_CS   cs;
static GUI_TTF_DATA data;
static GUI_FONT     font;
static BOOL         TrueTypeInitFlag = False;
// 从加载字库文件,创建GUI字库
void TrueType_Load(char *path)
{
    FIL TrueTypeSrc;
    uint32_t bw=0;

    TrueTypeInitFlag = False;
    if(FR_OK != f_open(&TrueTypeSrc, path, FA_OPEN_EXISTING|FA_READ|FA_OPEN_ALWAYS)) return;
    if(hMem_type != Null) GUI_ALLOC_Free(hMem_type);
    hMem_type = GUI_ALLOC_AllocZero(TrueTypeSrc.fsize);
    if(hMem_type == Null) return;
    _acBuffer = GUI_ALLOC_h2p(hMem_type);
    if(FR_OK != f_read(&TrueTypeSrc, _acBuffer, TrueTypeSrc.fsize, &bw)) return;

    data.pData      = _acBuffer;
    data.NumBytes   = TrueTypeSrc.fsize;
    cs.pTTF         = &data;
    cs.PixelHeight  = 24;
    cs.FaceIndex    = 0;
    GUI_TTF_CreateFontAA(&font, &cs);

    TrueTypeInitFlag = True;
}
// 设置字体大小
void TTF_SetFont(int size)
{
    if(TrueTypeInitFlag != True) return;
    cs.PixelHeight = size;
    cs.FaceIndex = 0;
    GUI_TTF_CreateFontAA(&font, &cs);
}
// 文字显示
static void MusicInfo_Updata(void)
{
    if(PlayList_GetCurr(musicName) <= 0) return;
    GUI_EnableAlpha(1);
    GUI_SetTextMode(GUI_TEXTMODE_TRANS);
    GUI_UC_SetEncodeUTF8();
    TTF_SetFont(48);
    GUI_SetColor(0x8000FFFF);
    //GUI_DispStringAt("\xe9\x9f\xb3\xe9\xa2\x91\xe6\xa0\xbc\xe5\xbc\x8f\xef\xbc\x9a\x6d\x70\x33", 100, 230);
    GUI_DispStringAt("音频格式:mp3", 100, 260);
    GUI_EnableAlpha(0);
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115721
QQ
发表于 2014-12-6 10:44:25 | 显示全部楼层
加大的你的heap空间,这个矢量字体库的动态内存是来自malloc。
回复

使用道具 举报

3

主题

15

回帖

24

积分

新手上路

天宇

积分
24
 楼主| 发表于 2014-12-7 01:07:55 | 显示全部楼层
我已经把内存分配改成自己的函数了,是用外部 SDRAM 的,如下:
/*
#define ft_scalloc   calloc
#define ft_sfree     free
#define ft_smalloc   malloc
#define ft_srealloc  realloc
*/
#include "malloc.h"
#define ft_scalloc   mycalloc
#define ft_sfree     myfree
#define ft_smalloc   mymalloc
#define ft_srealloc  myrealloc

主要是英文显示正常了,汉字没有显示
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115721
QQ
发表于 2014-12-7 12:43:01 | 显示全部楼层

回 cty25 的帖子

cty25:我已经把内存分配改成自己的函数了,是用外部 SDRAM 的,如下:
/*
#define ft_scalloc   calloc
#define ft_sfree     free
#define ft_smalloc   malloc
....... (2014-12-07 01:07) 
这个汉字显示的确稍有些问题,后面学习F429的时候我再搞搞看。
回复

使用道具 举报

3

主题

15

回帖

24

积分

新手上路

天宇

积分
24
 楼主| 发表于 2014-12-8 10:00:58 | 显示全部楼层

回 eric2013 的帖子

eric2013:这个汉字显示的确稍有些问题,后面学习F429的时候我再搞搞看。 (2014-12-07 12:43)
感谢
回复

使用道具 举报

1

主题

33

回帖

36

积分

新手上路

积分
36
发表于 2014-12-9 16:29:38 | 显示全部楼层
标识关注,还没有运用过适量字体
回复

使用道具 举报

3

主题

15

回帖

24

积分

新手上路

天宇

积分
24
 楼主| 发表于 2014-12-10 22:17:59 | 显示全部楼层

回 maple_lu 的帖子

maple_lu:标识关注,还没有运用过适量字体 (2014-12-09 16:29)
呵呵,做播放器的时候用矢量字体,效果会更好
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115721
QQ
发表于 2014-12-11 10:28:01 | 显示全部楼层

回 cty25 的帖子

cty25:呵呵,做播放器的时候用矢量字体,效果会更好 (2014-12-10 22:17) 
是不是显示歌词很好看。
回复

使用道具 举报

0

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2016-9-19 09:07:28 | 显示全部楼层
楼主,你的问题解决了么 能否将解决办法写个帖子 谢谢[s:150]
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115721
QQ
发表于 2016-9-20 13:34:39 | 显示全部楼层

回 yanlutian 的帖子

yanlutian:楼主,你的问题解决了么 能否将解决办法写个帖子 谢谢[s:150] (2016-09-19 09:07) 
F429的emWin教程发布时带矢量汉字的教程和例子。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-14 10:36 , Processed in 0.301407 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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