搜索
bottom↓
回复: 23

请教:RT-GUI中的字体文件是如何组织的?想更换字体,12和16点阵的用取模工具生成成功了,想

[复制链接]

出0入0汤圆

发表于 2011-8-4 17:40:01 | 显示全部楼层 |阅读模式
目前RTGUI使用的是外部字库文件,存放在SD卡,使用"PCtoLCD2002"取模软件,取模方式是逐行式、高位在前,生成12点阵和16点阵的GB2312字体都成功,但想生成24点阵的字库文件,无论何种取模方式都显示乱码。我新建了一个"hz24font.c"文件如下:

#include <rtgui/font.h>

#ifdef RTGUI_USING_FONT24
#ifndef RTGUI_USING_HZ_FILE
const unsigned char hz24_font[] = {};

const struct rtgui_font_bitmap hz24 =
{
        hz24_font,                         /* bmp */
        RT_NULL,                        /* each character width, NULL for fixed font */
        RT_NULL,                        /* offset for each character */
        24,                                 /* width */
        24,                                 /* height */
        0,                                         /* first char */
        255                                        /* last char */
};

extern struct rtgui_font_engine hz_bmp_font_engine;
struct rtgui_font rtgui_font_hz24 =
{
        "hz",                                 /* family */
        24,                                 /* height */
        1,                                         /* refer count */
        &hz_bmp_font_engine,/* font engine */
        (void *)&hz24,                /* font private data */
};

/* size = 267616 bytes */
#else
struct rtgui_hz_file_font hz24 =
{
        {RT_NULL},                                 /* cache root                 */
        0,                                             /* cache size                 */
        24,                                         /* font size                 */
        72,                                                /* font data size         */
        -1,                                         /* fd                                 */
        "/.senjet/fonts/8.fon"//hzk16.fnt"        /* font_fn                         */
};

struct rtgui_font rtgui_font_hz24 =
{
        "hz",                                         /* family */
        24,                                         /* height */
        1,                                                 /* refer count */
        &rtgui_hz_file_font_engine,/* font engine */
        (void*)&hz24,                        /* font private data */
};
#endif
#endif

然后在font.c文件中添加了如下内容:
rtgui_font_system_add_font(&rtgui_font_hz24);
然而显示出来的字始终不对,显示的点阵是错位的,应该是生成的字库文件组织方式和字体引擎不兼容,所以请教一下如何生成正确的字体库?谢谢

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2011-8-4 17:44:39 | 显示全部楼层
刚好,上次也是一位网友说能否支持这类字体软件

那么,这类软件,大家在通常使用时是采用什么样的方式?能否举个例子什么的,然后我这边修改下,让RT-Thread/GUI直接支持它。

出0入0汤圆

 楼主| 发表于 2011-8-5 00:11:39 | 显示全部楼层
一般LCD屏幕原点是左上角,X、Y分别向右向上增长,从减小运算量的角度说我认为用逐行式、低位在前的取模方式比较好,通常取模软件都支持这种方式。比如“显”字生成的12*12点阵数据是:
{0xFC,0x01},
{0x04,0x01},
{0xFC,0x01},
{0x04,0x01},
{0xFC,0x01},
{0x00,0x00},
{0x52,0x02},
{0x54,0x02},
{0x54,0x01},
{0xD0,0x00},
{0xFF,0x07},
{0x00,0x00}
点阵排列如下图:

"显“字的点阵排列 (原文件名:1.png)
每行点阵两字节的数据,低位对齐。当然还有其它几种方式,可跟据实际的液晶选择。不过对TFT屏来说,我认为上述方式是最好的。

出0入0汤圆

发表于 2011-8-5 10:34:04 | 显示全部楼层
这仅是一个,一系列字符串中的汉字应该是如何使用?难道是一套完整的字库?

出0入0汤圆

 楼主| 发表于 2011-8-5 10:48:24 | 显示全部楼层
d回复【3楼】ffxz  
这仅是一个,一系列字符串中的汉字应该是如何使用?难道是一套完整的字库?
-----------------------------------------------------------------------

是的啊,需要生成一套完整的字库文件,放到SD卡。上面只是说明其中一个字的点阵数据在文件中是如何组织排列的。

出0入0汤圆

发表于 2011-8-5 11:46:10 | 显示全部楼层
回复【4楼】senjet  
是的啊,需要生成一套完整的字库文件,放到sd卡。上面只是说明其中一个字的点阵数据在文件中是如何组织排列的。
-----------------------------------------------------------------------

如何做?希望以前在其他系统做过的能够给个示例

出0入0汤圆

 楼主| 发表于 2011-8-5 12:16:03 | 显示全部楼层
回复【5楼】ffxz  
回复【4楼】senjet  
是的啊,需要生成一套完整的字库文件,放到sd卡。上面只是说明其中一个字的点阵数据在文件中是如何组织排列的。
-----------------------------------------------------------------------
如何做?希望以前在其他系统做过的能够给个示例
-----------------------------------------------------------------------
具体做法跟STM32 radio项目里把字库放SD卡下的方式是一样的啊,只不过由于rtgui里的字体引擎读取字库里的字模数据方式与取模软件生
的GB2312字库不兼容,所以显示出来的点阵是乱的。取模软件只要设定好字体、大小、取模方式,就可生成对应的GB2312二进制字库文件,如果RTGUI字体引擎与字模软件生成的二进制字库兼容,这样用户就可以很方使更改、添加字体了啊。

出0入663汤圆

发表于 2011-8-5 12:47:53 | 显示全部楼层
取模软件应该比系统更灵活才对,没可能要系统去迁就某个取模软件的。

出0入0汤圆

 楼主| 发表于 2011-8-5 14:02:17 | 显示全部楼层
回复【7楼】gzhuli  咕唧霖
取模软件应该比系统更灵活才对,没可能要系统去迁就某个取模软件的。
-----------------------------------------------------------------------
这个说法我支持,所以才想要了解系统的取模方式的,不知您了解吗?

出0入0汤圆

发表于 2011-8-5 23:36:17 | 显示全部楼层
去迁就取模软件,这不是因为缺少取模软件么。迁就下也没什么关系,关键是这样做不会破坏RT-Thread/GUI的整体构架,我也去找个PCtoLCD2002先学习学习,它能够生成字模二进制文件吗?

出0入0汤圆

 楼主| 发表于 2011-8-6 16:26:18 | 显示全部楼层
回复【9楼】ffxz  
去迁就取模软件,这不是因为缺少取模软件么。迁就下也没什么关系,关键是这样做不会破坏rt-thread/gui的整体构架,我也去找个pctolcd2002先学习学习,它能够生成字模二进制文件吗?
-----------------------------------------------------------------------
是的,可以生成二进制文件

出0入0汤圆

发表于 2011-8-7 09:41:56 | 显示全部楼层
果真可以生存二进制文件,那么这样就简单了。

出0入0汤圆

发表于 2011-8-7 18:50:57 | 显示全部楼层
好像是选择:
阴码,顺序走向,C51格式,行列式就可以兼容当前RT-Thread/GUI的字体格式。

出0入0汤圆

发表于 2011-8-10 13:11:05 | 显示全部楼层
关于RT-Thread/GUI中使用到的字体,zzm给了个方法,就是参照这个贴子里的做法:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=708692&bbs_page_no=1&bbs_id=9999

出0入0汤圆

发表于 2011-8-17 14:49:04 | 显示全部楼层
具体怎样做,小弟菜鸟啊
用ZZM的方法生产BIN文件后具体怎样添加到RT-Thrdad/GUI的字体中去呢?

出0入0汤圆

发表于 2011-8-17 15:27:30 | 显示全部楼层
回复【2楼】senjet  

LCD屏幕原点是左上角,X、Y分别向右向上增长
-----------------------------------------------------------------------

怎么可能!Y应该是向下增长的

出0入0汤圆

发表于 2011-8-17 15:31:35 | 显示全部楼层
用ZZM的方法生产BIN文件,经过测试,也是生成16点阵的GB2312字体成功,但想生成24点阵的字库文件,显示乱码。有没有什么办法能正常显示24点阵的字库文件??

出0入0汤圆

发表于 2011-8-17 18:03:54 | 显示全部楼层
确实,超过16点阵的字体存在问题,谢谢senjet、ZigBee Notes的提醒。

目前使用PCtoLCD2002来生成字模已经没问题了,详见官网上的教程。

出0入0汤圆

发表于 2011-8-17 18:27:32 | 显示全部楼层
这问题很容易解决, 找一个字库生成软件, 叫"多国文字点阵字库生成器.exe", 易木雨软件工作室的, 中文编码的话, 还支持GBK和GB2312编码, 可以生成任意字体, 任意点阵大小的字库文件, 输出格式有bin, BDF, BMP.

我已经在液晶屏测试显示16*16, 24*24, 32*32, 40*40, 48*48的GBK和GB2312中文字库, 基本确认没问题.

出0入0汤圆

发表于 2011-8-17 18:49:44 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-18 09:17:02 | 显示全部楼层
太好了,解决了字体问题,RT-Thread/GUI越来越完善了!

出0入0汤圆

 楼主| 发表于 2011-8-18 10:24:03 | 显示全部楼层
没想到这么快解决了,希望RT-Thread/GUI越来越好

出0入0汤圆

 楼主| 发表于 2011-8-18 10:29:09 | 显示全部楼层
回复【15楼】linghu2  令狐二中
回复【2楼】senjet  
lcd屏幕原点是左上角,x、y分别向右向上增长
-----------------------------------------------------------------------
怎么可能!y应该是向下增长的
-----------------------------------------------------------------------
笔误,原点在左上角只能向下增长了

出0入0汤圆

发表于 2012-2-12 21:25:10 | 显示全部楼层
mark.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 11:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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