UCGUI汉字显示(通过外部FLASH W25QXX)

2019-07-20 15:12发布

最近在做一个实验,UCGUI通过外部FLASH来实现汉字显示。通过参考教程,修改了几个文件后,发现程序中显示的文字方位不对,变成了镜像的并且还旋转90度显示了。以为是字库问题,但是调用战舰里面的汉字显示函数后,可以正常显示。所以不知道怎么回事,下面把文件上传,请各路高手帮忙指点下。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
王朝代号
2019-07-21 06:42
2449164582 发表于 2017-4-19 08:58
解码和字库生成的扫描方式不同,改改程序就行了

我对比了一下fontupd和GUICharPEx中的字库解码函数,这里好像只是得出偏移地址不会影响显示的位置,而且使用Show_Str这个函数显示中文的话是可以正常显示的,说明字库没有问题吧。会不会是下面这段代码的原因呢?[mw_shl_code=c,true]/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
* GUIPROP_DispChar
*
* Purpose:
*   This is the routine that displays a character. It is used by all
*   other routines which display characters as a subroutine.
*/
void GUIPROP_X_DispChar(U16P c)
{       
        int BytesPerLine;
    GUI_DRAWMODE DrawMode = GUI_Context.TextMode;
    const GUI_FONT_PROP GUI_UNI_PTR *pProp = GUI_Context.pAFont->p.pProp;
    //ËÑË÷¶¨Î»×Ö¿aêy¾YDÅÏ¢
    for (; pProp; pProp = pProp->pNext)                                         
    {
        if ((c >= pProp->First) && (c <= pProp->Last)) break;
    }
    if (pProp)
    {
        GUI_DRAWMODE OldDrawMode;
        const GUI_CHARINFO GUI_UNI_PTR * pCharInfo = pProp->paCharInfo;
        GUI_GetDataFromMemory(pProp, c);//è&#161;3&#246;×&#214;&#196;£êy&#190;Y
        BytesPerLine = pCharInfo->BytesPerLine;               
        OldDrawMode  = LCD_SetDrawMode(DrawMode);
        LCD_DrawBitmap(GUI_Context.DispPosX, GUI_Context.DispPosY,
                       pCharInfo->XSize, GUI_Context.pAFont->YSize,
                       GUI_Context.pAFont->XMag, GUI_Context.pAFont->YMag,
                       1,     /* Bits per Pixel */
                       BytesPerLine,
                       &GUI_FontDataBuf[0],
                       &LCD_BKCOLORINDEX
                       );
        /* Fill empty pixel lines */
        if (GUI_Context.pAFont->YDist > GUI_Context.pAFont->YSize)
        {
            int YMag = GUI_Context.pAFont->YMag;
            int YDist = GUI_Context.pAFont->YDist * YMag;
            int YSize = GUI_Context.pAFont->YSize * YMag;
            if (DrawMode != LCD_DRAWMODE_TRANS)
            {
                LCD_COLOR OldColor = GUI_GetColor();
                GUI_SetColor(GUI_GetBkColor());                               
                LCD_FillRect(GUI_Context.DispPosX, GUI_Context.DispPosY + YSize,
                             GUI_Context.DispPosX + pCharInfo->XSize,
                             GUI_Context.DispPosY + YDist);
                GUI_SetColor(OldColor);
            }
        }
        LCD_SetDrawMode(OldDrawMode); /* Restore draw mode */
                GUI_Context.DispPosX += pCharInfo->XDist * GUI_Context.pAFont->XMag;
    }
}[/mw_shl_code]

一周热门 更多>