请教:RT-GUI中的字体文件是如何组织的?想更换字体,12和16点阵的用取模工具生成成功了,想
目前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);
然而显示出来的字始终不对,显示的点阵是错位的,应该是生成的字库文件组织方式和字体引擎不兼容,所以请教一下如何生成正确的字体库?谢谢 刚好,上次也是一位网友说能否支持这类字体软件
那么,这类软件,大家在通常使用时是采用什么样的方式?能否举个例子什么的,然后我这边修改下,让RT-Thread/GUI直接支持它。 一般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}
点阵排列如下图:
http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_664332F48RIL.png
"显“字的点阵排列 (原文件名:1.png)
每行点阵两字节的数据,低位对齐。当然还有其它几种方式,可跟据实际的液晶选择。不过对TFT屏来说,我认为上述方式是最好的。 这仅是一个,一系列字符串中的汉字应该是如何使用?难道是一套完整的字库? d回复【3楼】ffxz
这仅是一个,一系列字符串中的汉字应该是如何使用?难道是一套完整的字库?
-----------------------------------------------------------------------
是的啊,需要生成一套完整的字库文件,放到SD卡。上面只是说明其中一个字的点阵数据在文件中是如何组织排列的。 回复【4楼】senjet
是的啊,需要生成一套完整的字库文件,放到sd卡。上面只是说明其中一个字的点阵数据在文件中是如何组织排列的。
-----------------------------------------------------------------------
如何做?希望以前在其他系统做过的能够给个示例 回复【5楼】ffxz
回复【4楼】senjet
是的啊,需要生成一套完整的字库文件,放到sd卡。上面只是说明其中一个字的点阵数据在文件中是如何组织排列的。
-----------------------------------------------------------------------
如何做?希望以前在其他系统做过的能够给个示例
-----------------------------------------------------------------------
具体做法跟STM32 radio项目里把字库放SD卡下的方式是一样的啊,只不过由于rtgui里的字体引擎读取字库里的字模数据方式与取模软件生
的GB2312字库不兼容,所以显示出来的点阵是乱的。取模软件只要设定好字体、大小、取模方式,就可生成对应的GB2312二进制字库文件,如果RTGUI字体引擎与字模软件生成的二进制字库兼容,这样用户就可以很方使更改、添加字体了啊。 取模软件应该比系统更灵活才对,没可能要系统去迁就某个取模软件的。 回复【7楼】gzhuli咕唧霖
取模软件应该比系统更灵活才对,没可能要系统去迁就某个取模软件的。
-----------------------------------------------------------------------
这个说法我支持,所以才想要了解系统的取模方式的,不知您了解吗? 去迁就取模软件,这不是因为缺少取模软件么。迁就下也没什么关系,关键是这样做不会破坏RT-Thread/GUI的整体构架,我也去找个PCtoLCD2002先学习学习,它能够生成字模二进制文件吗? 回复【9楼】ffxz
去迁就取模软件,这不是因为缺少取模软件么。迁就下也没什么关系,关键是这样做不会破坏rt-thread/gui的整体构架,我也去找个pctolcd2002先学习学习,它能够生成字模二进制文件吗?
-----------------------------------------------------------------------
是的,可以生成二进制文件 果真可以生存二进制文件,那么这样就简单了。 好像是选择:
阴码,顺序走向,C51格式,行列式就可以兼容当前RT-Thread/GUI的字体格式。 关于RT-Thread/GUI中使用到的字体,zzm给了个方法,就是参照这个贴子里的做法:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=708692&bbs_page_no=1&bbs_id=9999 具体怎样做,小弟菜鸟啊
用ZZM的方法生产BIN文件后具体怎样添加到RT-Thrdad/GUI的字体中去呢? 回复【2楼】senjet
LCD屏幕原点是左上角,X、Y分别向右向上增长
-----------------------------------------------------------------------
怎么可能!Y应该是向下增长的 用ZZM的方法生产BIN文件,经过测试,也是生成16点阵的GB2312字体成功,但想生成24点阵的字库文件,显示乱码。有没有什么办法能正常显示24点阵的字库文件?? 确实,超过16点阵的字体存在问题,谢谢senjet、ZigBee Notes的提醒。
目前使用PCtoLCD2002来生成字模已经没问题了,详见官网上的教程。 这问题很容易解决, 找一个字库生成软件, 叫"多国文字点阵字库生成器.exe", 易木雨软件工作室的, 中文编码的话, 还支持GBK和GB2312编码, 可以生成任意字体, 任意点阵大小的字库文件, 输出格式有bin, BDF, BMP.
我已经在液晶屏测试显示16*16, 24*24, 32*32, 40*40, 48*48的GBK和GB2312中文字库, 基本确认没问题. mark 太好了,解决了字体问题,RT-Thread/GUI越来越完善了! 没想到这么快解决了,希望RT-Thread/GUI越来越好 回复【15楼】linghu2令狐二中
回复【2楼】senjet
lcd屏幕原点是左上角,x、y分别向右向上增长
-----------------------------------------------------------------------
怎么可能!y应该是向下增长的
-----------------------------------------------------------------------
笔误,原点在左上角只能向下增长了 mark.
页:
[1]