硬汉嵌入式论坛

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

[emWin] emwin外置xbf字体的使用方法

[复制链接]

7

主题

33

回帖

17

积分

新手上路

积分
17
发表于 2013-12-12 15:46:12 | 显示全部楼层 |阅读模式
这几天在瞎搞xbf字体功能很强大,可是官方给的例程太过简陋,也没有人发自己的例子给大家所以捣鼓了很久

这边是我的实现代码是在stm32f407上运行的,文件系统是fatfs

#include "GUI.h"
#include "ff.h"
#include "GUI_Private.h"
GUI_FONT     XBFFont;
GUI_XBF_DATA XBF_Data;
FIL fontfsrc;//注意,必须为全局变量
static int _cbGetData(U32 Off, U16 NumBytes, void * pVoid, void * pBuffer) {
    FIL fsrc;        //
    FRESULT res;  //
    UINT br;
    char string[30];
    int flag=0;
  fsrc = *(FIL *)pVoid;
  /* Set file pointer to the requested position */
    res = f_lseek(&fsrc,Off); //  
    if (res != FR_OK) {
    res = f_open(&fontfsrc, "0:/sys/Font18std.xbf", FA_OPEN_EXISTING | FA_READ);//写上字体文件存放的位置
   fsrc =fontfsrc;
       res = f_lseek(&fsrc,Off); //

    if (res != FR_OK) {
    return 1; /* Error */
  }
  }
    res=f_read(&fsrc,pBuffer,NumBytes,&br);
    if (res != FR_OK) {
    return 1; /* Error */
  }
  if (br != NumBytes) {
    return 1; /* Error */
  }
  return 0; /* Ok */
}

void readFontfromXBFSD(void){
    FRESULT res;  // 定义操作结果变量
    GUI_FONTINFO fontinfo;
    GUI_CHARINFO_EXT charinfo;
    int i;
    int string2;
        res = f_open(&fontfsrc, "0:/sys/Font18std.xbf", FA_OPEN_EXISTING | FA_READ);//写上字体文件存放的位置
  GUI_XBF_CreateFont(&XBFFont,             /* Pointer to GUI_FONT structure in RAM */
                     &XBF_Data,         /* Pointer to GUI_XBF_DATA structure in RAM */
                     GUI_XBF_TYPE_PROP, /* Font type to be created *///字体的格式,我用的stand就是这个,其他还有ext和aa_ext,对应的是fontcvt里的extended和extended,antialiased
                     _cbGetData,        /* Pointer to callback function */
                     &fontfsrc);            /* Pointer to be passed to GetData function */
}

设定XBFFont就可以作为自己自定义的字体啦,只要不关闭字体文件就可以正常的使用了,当然在用之前不要忘了使用GUI_UC_SetEncodeUTF8();设置字体编码,输入的文字也用UTF8编码的,gb2312可认不出来呀

更新:在getdata里加入了打开字体文件,这样当你别的地方需要用到文件系统的时候也不会出错了(要放在判断里面哦而且不要关闭,不然就会每次查找都打开一次卡的飞起)
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2013-12-12 17:45:51 | 显示全部楼层
非常感谢分享,加精
回复

使用道具 举报

7

主题

33

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2013-12-13 11:13:38 | 显示全部楼层
哈哈哈哈,死机的问题找到了,原来是堆栈开太小了,开大就一切正常啦~
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2013-12-13 11:20:45 | 显示全部楼层

回 jimmjimm 的帖子

jimmjimm:哈哈哈哈,死机的问题找到了,原来是堆栈开太小了,开大就一切正常啦~ (2013-12-13 11:13) 
给力,兄弟能把这个帖子稍稍的完善下不,顺便把标题的半成品去掉。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2013-12-17 10:19:08 | 显示全部楼层

回 geshanyou 的帖子

geshanyou:不要用文件系统   卡的要死  ! (2013-12-17 10:17) 
的确是这样的
回复

使用道具 举报

7

主题

33

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2013-12-17 11:02:13 | 显示全部楼层

回 geshanyou 的帖子

geshanyou:不要用文件系统   卡的要死  ! (2013-12-17 10:17) 
可能因为我用f4比较快?虽然能感觉到拖慢了速度,但是总体速度还是能接受的,有一点要注意的是,千万不能关闭字体文件,不然每次查找的时候需要再打开一次字体文件,之前我这么做的时候,也是卡的要死,后来改成一直打开,只在f_lseek失败的时候再打开一次,这样速度勉强可以接受
回复

使用道具 举报

3

主题

25

回帖

3

积分

新手上路

积分
3
发表于 2013-12-17 17:18:59 | 显示全部楼层
[s:152]
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2013-12-18 19:55:30 | 显示全部楼层
SEGGER官网论坛上的问题,不会是你问的,看着应该是你。
回复

使用道具 举报

7

主题

33

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2013-12-19 09:03:05 | 显示全部楼层

回 eric2013 的帖子

eric2013:SEGGER官网论坛上的问题,不会是你问的,看着应该是你。 (2013-12-18 19:55) 
是我问的,不过我产品序列号就写了个123456....然后就收到邮件说验证成功了....我也不知道怎么回事..然后就顺手问问这问题
回复

使用道具 举报

36

主题

2040

回帖

2148

积分

至尊会员

积分
2148
发表于 2013-12-19 09:48:54 | 显示全部楼层

回 jimmjimm 的帖子

jimmjimm:是我问的,不过我产品序列号就写了个123456....然后就收到邮件说验证成功了....我也不知道怎么回事..然后就顺手问问这问题 (2013-12-19 09:03) 
挺好的,多去国外网站和论坛逛逛能学到不少的东西
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

41

主题

97

回帖

220

积分

高级会员

积分
220
发表于 2013-12-23 12:56:33 | 显示全部楼层
jimmjimm
能共享下你的工程吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2014-4-7 12:34:13 | 显示全部楼层
感谢,真的可以显示了。。。。。
回复

使用道具 举报

14

主题

17

回帖

59

积分

初级会员

积分
59
发表于 2014-6-25 14:57:47 | 显示全部楼层
谢谢,终于找到了![s:152]
回复

使用道具 举报

3

主题

14

回帖

3

积分

新手上路

积分
3
发表于 2015-3-3 18:01:26 | 显示全部楼层
问一下,不用文件系统怎么读取flash里面的字库出来呢
回复

使用道具 举报

6

主题

32

回帖

6

积分

新手上路

积分
6
发表于 2015-3-5 15:58:05 | 显示全部楼层

回 eric2013 的帖子

eric2013:的确是这样的 (2013-12-17 10:19) 
IO 一直都是瓶颈,但是这样一棒子打死就未免太草率了,我用的FATFS,也是XBF字体,GUI总共的显存就20K,非常快,是你使用的问题。。。。
回复

使用道具 举报

6

主题

32

回帖

6

积分

新手上路

积分
6
发表于 2015-3-5 15:58:43 | 显示全部楼层

回 geshanyou 的帖子

geshanyou:不要用文件系统   卡的要死  ! (2013-12-17 10:17) 
IO 一直都是瓶颈,但是这样一棒子打死就未免太草率了,我用的FATFS,也是XBF字体,GUI总共的显存就20K,非常快,是你使用的问题。。。。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 08:48 , Processed in 0.257906 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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