硬汉嵌入式论坛

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

[emWin] 移植安富莱的GB2312全字库的显示方法,汉字正常,字母显示不是很完美。

[复制链接]

15

主题

74

回帖

119

积分

初级会员

积分
119
发表于 2020-5-28 15:28:05 | 显示全部楼层 |阅读模式
字母相对于汉字,会稍微靠上或靠下,有没有什么办法解决下?注:由字库读取的字母是标准ASC码。
{
    int BytesPerLine;
    GUI_DRAWMODE DrawMode = GUI_pContext->TextMode;
    const GUI_FONT_PROP GUI_UNI_PTR *pProp = GUI_pContext->pAFont->p.pProp;
       
    /* 确定显示的字符是否在有效范围内 */
    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;
        //此处能不能判断输入字符c是汉字还是字母,汉字继续执行,字母让emwin自己显示?因为字母也继续执行的话,显示效果不是很好
        GUI_GetDataFromMemory(pProp, c);
        BytesPerLine = pCharInfo->BytesPerLine;     
        OldDrawMode  = LCD_SetDrawMode(DrawMode);
        LCD_DrawBitmap(GUI_pContext->DispPosX, GUI_pContext->DispPosY,
                       pCharInfo->XSize, GUI_pContext->pAFont->YSize,
                       GUI_pContext->pAFont->XMag, GUI_pContext->pAFont->YMag,
                       1,   
                       BytesPerLine,
                       &GUI_FontDataBuf[0],
                       &LCD_BKCOLORINDEX
                       );
               
        /* 填充背景 */
        if (GUI_pContext->pAFont->YDist > GUI_pContext->pAFont->YSize)
        {
            int YMag = GUI_pContext->pAFont->YMag;
            int YDist = GUI_pContext->pAFont->YDist * YMag;
            int YSize = GUI_pContext->pAFont->YSize * YMag;
            if (DrawMode != LCD_DRAWMODE_TRANS)
            {
                LCD_COLOR OldColor = GUI_GetColor();
                GUI_SetColor(GUI_GetBkColor());
                LCD_FillRect(GUI_pContext->DispPosX, GUI_pContext->DispPosY + YSize,
                             GUI_pContext->DispPosX + pCharInfo->XSize,
                             GUI_pContext->DispPosY + YDist);
                GUI_SetColor(OldColor);
            }
        }
               
        LCD_SetDrawMode(OldDrawMode);
      //if (!GUI_MoveRTL)
        GUI_pContext->DispPosX += pCharInfo->XDist * GUI_pContext->pAFont->XMag;
    }
}

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115787
QQ
发表于 2020-5-28 15:29:50 | 显示全部楼层
不用修改这里,重新生成字母点阵即可,我们用的是从UDOS里面导出来的。

你自己重新生成即可。
回复

使用道具 举报

15

主题

74

回帖

119

积分

初级会员

积分
119
 楼主| 发表于 2020-5-29 09:02:32 | 显示全部楼层
eric2013 发表于 2020-5-28 15:29
不用修改这里,重新生成字母点阵即可,我们用的是从UDOS里面导出来的。

你自己重新生成即可。

好的,我去试试
回复

使用道具 举报

15

主题

74

回帖

119

积分

初级会员

积分
119
 楼主| 发表于 2020-5-29 09:02:50 | 显示全部楼层
eric2013 发表于 2020-5-28 15:29
不用修改这里,重新生成字母点阵即可,我们用的是从UDOS里面导出来的。

你自己重新生成即可。

谢谢硬汉大哥
回复

使用道具 举报

15

主题

74

回帖

119

积分

初级会员

积分
119
 楼主| 发表于 2020-5-29 10:27:26 | 显示全部楼层
eric2013 发表于 2020-5-28 15:29
不用修改这里,重新生成字母点阵即可,我们用的是从UDOS里面导出来的。

你自己重新生成即可。

这个生成的字体是不是需要为等宽的啊。如果方便的话,能不能给个例子,我现在打算用emwin自带的字体软件生成下等宽的ASC码试试。同时,ASC的点阵数据是不是也是放到存取汉字的数组内
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115787
QQ
发表于 2020-5-29 10:34:53 | 显示全部楼层
mmo 发表于 2020-5-29 10:27
这个生成的字体是不是需要为等宽的啊。如果方便的话,能不能给个例子,我现在打算用emwin自带的字体软件 ...

看V6的emWin教程,里面都写了。

http://www.armbbs.cn/forum.php?mod=viewthread&tid=19834
回复

使用道具 举报

15

主题

74

回帖

119

积分

初级会员

积分
119
 楼主| 发表于 2020-5-29 16:12:13 | 显示全部楼层
eric2013 发表于 2020-5-29 10:34
看V6的emWin教程,里面都写了。

http://www.armbbs.cn/forum.php?mod=viewthread&tid=19834

测试好了,有没有生成点阵的软件分享下啊,硬汉大哥,我用emwin自带的生成点阵,不是以十六进制生成的。有没有办法修改下

Song24.c

130.56 KB, 下载次数: 0

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-19 00:48 , Processed in 0.254358 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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