用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心解决方案电子通信

VxWorks汉字显示解决方案

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 22:49:10
indML双字节编码显示的参数和实现思路集中体现在点阵存储文件的结构上,该文件的框架如下(这些文件在WIND_BASE/target/src/ugl/fonts/bmf目录下):

UGL_LOCAL const unsigned char UGL_FAR_DATA

page0Data[]=

{…

/*0x0023('#')*/

0,/*page*/

0x23,/*index*/

0,/*size(MSB)*/

20,/*size(LSB)*/

8,/*width*/

16,/*high*/

14,/*ascent*/

0x00,0x00,0x00,0x00,0x44,0x44,0x44,0xfe,0x44,0x44,0x44,0xfe,0x44,0x44,0x44,0x00,/*数据*/

/*0x0024和其它字符*/

/*结束*/

0,0,0,0

}/*西文扩展为双字节编码的点阵表*/

/*上表解析:

page+index就是该字符的ASCII编码,过扩成了双字节;

size(MSB)+size(LSB)是该字节的点阵信息长度,注意实际描述体的长度是2(2字节page,index)+该长度+1(从0开始编大小,所以从1数据要加1),而ascent之后的真正点阵数据的大小是该大小减4;

width+height是该点阵资料的宽度和高度;

ascent是点阵处在baseline以上的偏移位置,baseline的位置要看整个字符表描述结构的定义;

data是按行扫描得到的点阵资料,是列递增把行显示效果排成一个连续空间后,按字节来描述每位的打点状态;如果行宽是8位的整数倍,不会把位补0去凑8位整数倍 。

字符点阵描述数据依次往下排列,直到以4个0标志结束。

*/

UGL_LOCAL const unsigned char UGL_FAR_DATA

Page1Data[]=

{ 0x81,/*page*/

0x40,/*index*/

0,/*size*/

36,/*size*/

16,/*width*/

16,/*hight*/

14,/*ascent*/

0x00,0x08,0xff,0xfc,0x04,0x00,0x04,0x00,0x08,0x00,0x08,0x10,0x1f,0xf8,0x00,0x10,

0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x02,0x20,0x01,0x40,0x00,0x80,

/*其它字符*/

/*结束*/

0,0,0,0

}*/国标码对应的点阵表*/

/*上表解析:

数据含义与西文表类似,注意字码是双字节国标码*/

UGL_LOCAL const unsigned char *const pageArray[]

{ page0Data,

page1Data,

UGL_NULL

};/*总的点阵资料表*/

/*上表解析:

把分类的点阵资料表汇集成一张表,总表以UGL_NULL结束,注意各个分表是以0,0,0,0结束。

可以把汉字表按GB2312编码的page分类,构建多个汉字分表,然后把分表指针填入该表。当然,也可以做成一个汉字大表,把指针放在该表,甚至也可以把中西文点阵做成的中西文混合大表,然后把该表指针放在该数组里。

*/

const UGL_BMF_FONT_DESC uglBMFFont_Song_16=

{

/*UGL_FONT_DESC结束*/

{

{16,16}, /*点阵大小*/

{UGL_FONT_BOLD_OFF,UGL_FONT_BOLD_OFF},

/*宽度*/

UGL_FONT_UPRIGHT, /*斜体*/

UGL_FONT_PROPORTIONAL,/*行间距属性*/

UGL_FONT_UNICODE, /*字符集*/

“Song 16x16Dot”, /*字体名称*/

“Song” /*字体系列名称*/

}/*点阵名称等点阵属性表*/

/*UGL_BMF_FONT_DESC结构*/

/*点阵表的属性和位置*/

2, /*行间距*/

14, /*最大上偏移位置*/

2, /*最大下偏移位置*/

14, /*最大宽度*/

pageArray /*字形页*/

};/*点阵描述结构*/

/*上表解析:

首先是定义属性表,然后是定义字模和间距,并定义总的点阵描述表指针。

*/

最后定义的const UGL_BMF_FONT_DESC uglBMFFont_Song_16包含了该点阵的所有信息。只要能定位该结构,则任何能在该点阵表内匹配出字码的字都可以显示出来。WindML选择不同的点阵就是选择不同的该结构去做点阵寻址,其实现的大体过程如下:

①WIND_BASE/target/src/ugl/config/uglBmfCfge文件描述了整个系统能使用的字符集,如:

extern const UGL_BMF_FONT_DESC uglBMFFont_Courier_12;

extern const uglBMFFont_Song_16;/*就是上面的例子*/

const UGL_BMF_FONT_DESC * uglBMFFontData[]=

{

&uglBMFFont_Courier_12,

&uglBMFFont_Song_16,

NULL

};

②通过如uglDriverFind (UGL_FONT_ENGINE_TYPE,0,(UGL_UINT32*)&fontDrvId);的调用定位点阵驱动,即控制对点阵表访问、打点等操作的函数;

通过如uglFontFindString(fontDrvId,“familyName=Song;pixelSize=16”&systemFontDef);的调用定位点阵描述结构;

通过如fontSystem=uglFontCreate(fontDrvId,&systemFontDef));的调用绑接点阵和点阵驱动,并标识为fontSystem;

如此重复创建多个字符集的点阵标识。

③通过如:uglFontSet(gc,fontSystem);的调用设置当前字符集;

通过如uglTextDrawW(gc,iX,iY,iLength,caString);的调用在iX,iY的位置显示caString里的字码。

可见,只要开发者根据上述的存储结构开发出对应的字符点阵,然后把点阵描述结构加入到uglBMFFontData,便可以用系统的函数使用这些点阵了。在Dos/Windosw、Linux系统下一些应用程序,可以把操作系统的点阵导出为C文件或数组,把这些导出的文件加以调整,就可以得到VxWorks系统支持的格式。

5 Zinc对汉字的支持

只要WindML的汉字支持做成功,则可以按如下方法使Zinc支持汉字:

WIND_BASE/target/src/zinc/generic/i_ugldsp.cpp文件是WindML与Zic的接口文件,在ZafScreenDisplay::ZafScreenDisplay函数里使用上述的函数定义了Zinc要使用的字符集。把这些字符集改成汉字字符集,并且把Zinc配置成支持UNICODE的方式重新编译,则Zinc就自然支持汉字显示了。

上一页  [1] [2] [3]  下一页

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:25,046.88000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号