hpdell 发表于 2024-1-13 11:50:18

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

本帖最后由 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 = {0};
//      
//      gb2utf8( &__utf8_buf, (const char *)"使用H743开发板");
//      
      TEXT_SetFont(hItem, &XBF_Font16);
      TEXT_SetText(hItem, "使");                     // 这个地方 使用 XBF 字体 显示不出来 中文 ??         
   
   }
   
}




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

      


eric2013 发表于 2024-1-13 12:33:35

使用FontCvt小字库方式成功了没。

hpdell 发表于 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 字体也捣鼓成功了




页: [1]
查看完整版本: emWin 搞的 xbf 字体存入到外部 spi flash 里面, 显示失败 ?