硬汉嵌入式论坛

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

[emWin] emWin 搞的 xbf 字体存入到外部 spi flash 里面, 显示失败 ?

[复制链接]

610

主题

3051

回帖

4901

积分

至尊会员

积分
4901
发表于 2024-1-13 11:50:18 | 显示全部楼层 |阅读模式
本帖最后由 hpdell 于 2024-1-13 13:12 编辑

emWin 搞的 xbf 字体存入到外部 spi flash 里面, 显示失败 ?


使用 FontCvtST_v5.44.exe 转换 的 xbf 字体


GUI_XBF_DATA XBF_Data16;
GUI_FONT     XBF_Font16;
void         *FontFile16;




        /* 创建16点阵字体 */
        GUI_XBF_CreateFont(&XBF_Font16,        /* GUI_FONT类型变量     */
                                         &XBF_Data16,          /* GUI_XBF_DATA类型变量 */
                                         GUI_XBF_TYPE_PROP  ,    /* 字体类型  GUI_XBF_TYPE_PROP_EXT    GUI_XBF_TYPE_PROP    GUI_XBF_TYPE_PROP_AA2_EXT   */
                                         _cbGetData16,         /* 回调函数             */
                                         &FontFile16);         /* 回调函数参数         */        


static int _cbGetData16(U32 Off, U16 NumBytes, void * pVoid, void * pBuffer)
{
        // 直接从 外部 spi flash 里面读取字库数据
        uint32_t _uiReadAddr = (QSPI_APP_WIZARD_FONTS_HWZS_23PIX_SECTOR_ADDR*4096UL);
        _uiReadAddr += Off;
        /* 读取点阵数据 */
        sf_ReadBuffer(pBuffer, _uiReadAddr , NumBytes);

__log("\r\n_cbGetData16 SPI Flash NumBytes:%d   Off:%d\r\n", NumBytes, Off);   // NumBytes:18   Off:0  貌似不管显示中文什么字符, 传过来的 参数始终都是   NumBytes:18   Off:0     ?  有些不正常啊 ??
        
        return 0;
}


int main()
{

        
   
        /* 初始化 */
        GUI_Init();
            
   
        /*
         关于多缓冲和窗口内存设备的设置说明
           1. 使能多缓冲是调用的如下函数,用户要在LCDConf_Lin_Template.c文件中配置了多缓冲,调用此函数才有效:
                  WM_MULTIBUF_Enable(1);
           2. 窗口使能使用内存设备是调用函数:WM_SetCreateFlags(WM_CF_MEMDEV);
           3. 如果emWin的配置多缓冲和窗口内存设备都支持,二选一即可,且务必优先选择使用多缓冲,实际使用
                  STM32H7 + 32位SDRAM + RGB565/RGB888平台测试,多缓冲可以有效的降低窗口移动或者滑动时的撕裂
                  感,并有效的提高流畅性,通过使能窗口使用内存设备是做不到的。
           4. 所有emWin例子默认是开启三缓冲。
        */
        WM_MULTIBUF_Enable(1);

   
        /* 启用UTF-8编码 */
        GUI_UC_SetEncodeUTF8();
   
        Create_XBF_Font() ;


       ....
}



void InitDialog(WM_MESSAGE * pMsg)
{
    WM_HWIN hWin = pMsg->hWin;
    WM_HWIN hItem;
        
    //
    //FRAMEWIN
    //
    FRAMEWIN_SetFont(hWin,&GUI_Font32B_ASCII);
    FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);
    FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1);
    FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2);
    FRAMEWIN_SetTitleHeight(hWin,32);
   
   
    hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_BUTTON0);
    BUTTON_SetFont(hItem, &GUI_Font24B_1);
   
   
   /* 初始化TEXT0 */
   hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
   TEXT_SetText(hItem, "emWin");
   TEXT_SetFont(hItem, &GUI_Font32B_ASCII);        
         
         
   /* 初始化TEXT1 */
   hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_1);
   {
//      char  __utf8_buf [128] = {0};
//      
//      gb2utf8( &__utf8_buf[0], (const char *)"使用H743开发板");
//      
      TEXT_SetFont(hItem, &XBF_Font16);
      TEXT_SetText(hItem, "使");                       // 这个地方 使用 XBF 字体 显示不出来 中文 ??           
   
   }
   
}




貌似上述步骤看着也没有什么问题呀, 可就是使用 xbf 显示不出来
??

        


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
发表于 2024-1-13 12:33:35 | 显示全部楼层
使用FontCvt小字库方式成功了没。
回复

使用道具 举报

610

主题

3051

回帖

4901

积分

至尊会员

积分
4901
 楼主| 发表于 2024-1-13 13:12:36 | 显示全部楼层
本帖最后由 hpdell 于 2024-1-13 17:13 编辑
eric2013 发表于 2024-1-13 12:33
使用FontCvt小字库方式成功了没。

刚刚测试了一下最小 xbf 字库显示, 貌似也没有显示出来呀, 按照教程 28.2使用 FontCvt 生成 C 文件格式小字库的方法


目前 xbf 字体终于捣鼓成功,

sif 字体也捣鼓成功了




回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 01:19 , Processed in 0.188627 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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