MTK的语言与字库

来源:互联网 发布:龟山汉墓未解之谜 知乎 编辑:程序博客网 时间:2024/05/02 04:58
FONTEDITOR V1.3版本出来了
字库格式转换:ttf2bdf,bdf2fnt,bdf2fnb,fnt2bdf,fnb2bdf,fnt2fnb,fnb2fnt

FontEditor为一款功能强大的字体编辑和字体格式转换工具,支持制作32*32的全字库。能将TTF,OTF矢量字库转换为BDF字库,可以很方便的将Windows已经安装到系统的矢量字库转换为BDF字库,并能将TTF,OTF文件直接转换成BDF格式,并支持BDF,FNT,FNB文件格式的互转换,随心所欲将windows字体应用于各种嵌入式系统中。并支持将GB2312,BIG5,GBK转换为UCS2,UTF8,以及UCS2,UTF8编码的互转换

本软件现已应用于多个嵌入式平台,如MTK,QUALCOMM,TI,展讯等。

本软件主要功能:
1.字体点阵编辑,支持制作32*32点阵的全字库
2.支持BDF,FNT,FNB格式的互转换,BDF<-->FNT,BDF<-->FNB,FNT<-->FNB
3.直接将TTF,OTF文件转换为BDF,FNT,FNB格式
4.将Windows系统安装的TTF,OTF导入为BDF,FNT,FNB格式
5.将字符点阵导出为Bitmap文件,并提供字符点阵宽度索引
6.支持将GB2312,BIG5,GBK转换为UCS2,UTF8,并支持UCS2,UTF8编码的互转换

运行环境:Win2003, WinXP, Win2000, NT, WinME
版本发布说明:
V1.2
(1)BDF,FNT,FNB字体格式的互转换
(2)将Windows已经安装TTF转换为BDF格式
(3)将TTF文件导入转为BDF,FNT,FNB格式
(4)汉字查码

V1.25
(1)Windows已经安装TTF字体导入为BDF时,剔除无效字符
(2)将BDF,FNT,FNB导出为bitmap文件和字符宽度索引
(3)GB2312,BIG5,GBK转换为UCS2,UTF8,以及UCS2,UTF8互转换

V1.25.03
(1)将单个字符导出为Bitmap文件
(2)解决导出字库bitmap时,字符少于256个导出文件不正确的问题
(3)解决导出选择中字符实际上是导出所有字符的问题

V1.26
(1)增加修正字符点阵的功能,可对所有字符或者当前页字符的点阵大小和位移进行调整
(2)修正V1.25.03中导出位图文件选择取消无法退出程序的问题

V1.3
(1)增加导出全字库bitmap方式,同时支持二进制导出和ASCII码导出
(2)增强读取BDF文件的兼容性
(3)增加手动剔除无效字符功能

欢迎所需了解相关使用情况的人员与我联系,可以提供3天的体验版本。

==================================================================================
TTF转换成BDF
2008-09-12 21:47

 

由于TTF格式的字库可以转换成任意大小的BDF字库,而可以找到的BDF字库都是固定大小的,因此在实际制作BDF字体文件时,还是需要TTF格式的字库。把TTF转换成BDF的方法如下:
./ttf2bdf source.ttf -p yourSize -o destination.bdf
   即利用软件ttf2bdf可以把源文件source.ttf转换成大小为yourSize的BDF格式的文件destination.bdf。那在程序内部是如何实现将TTF转成BDF的呢?由2.2.1和2.2.2的介绍,并且查阅参考文献[3],可以知道TTF的内部存储结构。其中最核心的部分是TTF文件格式中的12个字节的文件表:表目录按tag以升序排列。

 

TypeNameDescriptionULONGtag4字节的标识ULONGcheckSum表中的CheckSumULONGoffsetTrueType font文件的起始偏移量OffsetULONGlength表长
   还有一个有关Offset表的信息,包括版本号,表的数量,查找范围。入口选择,转换范围。
   通过操作文件表,将描述表中的数据取出来,按照BDF字体所定义的格式写入,就可以生成对应的字体。比如,可以给出一小段c语言程序,此程序用于计算当前CheckSum的位置。
ULONG
CalcTableChecksum(ULONG *Table,ULONG Length)
{
ULONG Sum = 0L;
ULONG *Endptr=Table+((Length+3)&~3)/sizeof(ULONG);
while(Table<EndPtr)
Sum += *Table++;
return Sum;
}
   利用此程序可以将每个字体的信息分开,并将每个字体信息从文件中取出来,对每个字体进行操作。在从TTF转到BDF过程中,仅通过使用WINDOW的函数是很不方便的,最方便的办法是使用c语言对字体进行操作。我在此列出转换过程中最重要的几个值:PIXEL_SIZE,POINT_SIZE,RESOLUTION_X,RESOLUTION_Y,FONT_DESCENT,FONT_ASCENT,SWIDTH,DWIDTH,BBX。这些值决定着最后生成的BDF字体与TTF字体的失真度,因为TTF是可缩放的,而BDF是固定大小的,所以在转换过程中一定会出现失真的情况。

 

========================================================================================

MTK的语言问题,希望大家看完后顶帖

1MMI_featuresPLUTO.h(plutommi/customer/custresource/pluto_mmi)

     #define __MMI_LANG_SM_CHINESE__//定义宏开关

 

2FontRes.c(plutommi/customer/lcdresource/mainlcd240x320)

     <1>

     #ifdef __MMI_16X16_CHINESE_FONT__

     #include "L_Pluto_16x16_ch.h"                 //引入字库头文件

     #else

 

    <2>

     const RangeDataXXX_RangeData[a]={。。。}

 

     <3>

     const U16 mtk_gMaxDeployedLangs = 1;

 

     <4>

      #if defined(__MMI_LANG_SM_CHINESE__)

     sFontFamily pluto_ch_standardFamily ={6,{&Pluto_ch, &Pluto_ch,&Pluto_ch, &Pluto_ch,&Pluto_ch,&gVirtualKeyboardFont}};

     #endif

 

      <5>

     #if defined(__MMI_LANG_SM_CHINESE__)

     {

     {(char)0x80,(char)0x7B,(char)0x53,(char)0x4F,(char)0x2D,(char)0x4E,(char)0x87,(char)0x65,(char)0x00,(char)0x00},//LanguageName

       "*#0086#",//SSC string name

       0,

       { &pluto_ch_standardFamily },

       "zh"

     },

     #endif

 

附注:<2>中对应字体的长,宽,高,偏离值等,

     <3>对应添加的语言的种类数,

     <4>定义了界面中具体模块的字体,如gVirtualKeyboardFont对应与虚拟键盘中字体的显示问题

      <5>mtk_gLanguageArray)中对应要添加的语言以及其在手机语言列表中的显示顺序(注意各种语言的顺序)

  我们通常遇到的问题是在真机中有些地方的字体显示有问题(如虚拟键盘,日历等,还未探索清楚),每个语言都有相对应的语系(如pluto_en_standardFamilypluto_ch_standardFamily),当(虚拟键盘)有问题时,首先定位到有问题的语言(),寻找其中利用的语系中的相应模块(virtual_keyboard_latin),对其进行修改(可参考其他显示正确的相近工程中的相应模块拷贝修改(virtual_keyboard_latin),缺少相应字库时添加字库并在fontres.c中添加)

 

MTK多国语言相关经验总结

一、       移植多国语言

移植多国语言主要牵涉到对mmi_features.h(整个工程的宏控定义文件)fontres.c(字体资源文件)的修改,并添加相应的字库文件。

1       语言宏控的修改

mmi_features.h文件中,用于控制各种语言的开关是类似于__MMI_LANG_ENGLISH__的宏,打开该宏,那么工程就支持该种语言。有时侯,需要同时打开与该语言相关的一些宏,比如阿拉伯语的编码模式、汉语的编码模式。(当然这个编码模式一般都是设置好了的,但也有些许例外,自己看着办)

2       字库文件的添加

mtk中,字库主要是两个文件,一个是*.h文件,还有一个是对应的fontres.c文件。

①字库的获取

有两个方式:1)直接去网上找对应语言的字库文件。2)自己利用mtk公司所提供的MCT6.0工具来制作字库。不过mct6.0制作字库需要.bdf的点阵字库源文件,而网上能找的基本上都是.ttf的矢量字库文件,这就存在一个需要将ttf文件转换成bdf文件的第三方软件,并且转换的好坏将直接影响到最终用mct6.0生成的字库文件(目前我们用的是otf2bdf3,免费的,因此效果不是很好)。

       ②字库的使用。首先我们查看下mtk版本中自带的英文字库L_1_Pluto_Large.h是存放在什么位置的,然后将我们的*.h也放入相同的文件夹下;接下来我们需要将我们的fontres.c文件与mtk中原有的fontres.c文件合并为一个fontres.c文件:合并的方法就参考原有的fontres.c文件中英文字库的代码分布方式,将我们的fontres.c文件里面的代码利用语言宏控拷入mtk原有的fontres.c文件中。

       3、修改默认显示语言

       这个只需要修改C/NEOTEL26_06B_W07.20.MP.V21_MMI/custom/app/NEOTEL26_

06B_BB这个目录下面的nvram_cust_pack.c文件(不同的版本,该文件所处位置不一样,这里是6225的版本)。在该文件里面有如下一处:

   0x00,        

这个0x00值指的就是设置语言界面某种语言所处的位置。如果我们想修改默认显示语言为简体中文,而设置语言界面中文在第6的位置,那么我们将0x00这个值改为0x05即可。

 

转:http://blog.sina.com.cn/s/blog_4cd5d2bb0100jnv4.html

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 炸东西的油糊了怎么办 赠送面积为违建怎么办 执法不管违建我怎么办 司法考试毕业院校写错了怎么办 家具店西安一直拖着不交货怎么办 派出所私自迁移了我家户口怎么办? 退房子不退押金怎么办 租房子中介不退押金怎么办 租房子押金不退怎么办 外地人签户口到武汉怎么办 开发商不给办土地证怎么办 房间里的油烟味怎么办 现金借款app还不了款怎么办 学校不允许实习生自己租房怎么办 盯盯拍开不了机怎么办 向私人借钱不还怎么办 微信好友借钱不还怎么办 支付宝借不了钱怎么办 支付宝借条关了怎么办 qq群不小心解散了怎么办 qq群解散了照片怎么办 出租屋没窗户很闷怎么办 二手房交税后房主不卖怎么办 二房东收不到租拖欠房租怎么办 房东不给换门锁怎么办 租房到期房东联系不到租客怎么办 廉租房名下有车怎么办 路边停车收忘记交费怎么办 考编忘记交费了怎么办 深圳公租房入库了接下来怎么办 公租房5年以后怎么办 教务系统密码忘记了怎么办 林科大教务处密码忘记了怎么办 智学号密码忘了怎么办 正方教务管理系统忘记密码怎么办 正方教务系统忘记密码怎么办 教务网密码忘了怎么办 电动车解除限速报警器不响怎么办 公租房住满5年怎么办 广州公租房收入超标怎么办 深圳法院拍卖房子不肯搬走怎么办