MTK的语言与字库
来源:互联网 发布:龟山汉墓未解之谜 知乎 编辑:程序博客网 时间:2024/05/02 04:58
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天的体验版本。
==================================================================================
./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的语言问题,希望大家看完后顶帖
1。MMI_featuresPLUTO.h(plutommi/customer/custresource/pluto_mmi)
#define __MMI_LANG_SM_CHINESE__//定义宏开关
2。FontRes.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
- MTK的语言与字库
- MTK的语言与字库
- MTK 字库的添加
- MTK矢量字库与研究
- MTK 个人入门笔记(有关语族与通用字库)
- mtk 字库 输入法 手写输入
- MTK字库添加
- MTK字库添加
- MTK字库相关
- MTK点阵字库介绍
- MTK的语言
- MTK的语言问题
- MTK如何生成新字库
- 汉字点阵字库的原理与显示
- 矢量字库的设计与实现
- 汉字点阵字库的原理与显示
- Android6.0平台添加一种新语言与字库
- MTK阿拉伯语等矢量字库下载网址
- linux
- 在用code blocks中遇到的一些问题?
- JDBC连接数据库
- 立方体的纹理映射(黑白色交替)
- Linux下启动Oracle服务和监听程序(基础知识)
- MTK的语言与字库
- vc小总结
- linux下卸载默认安装java以及安装JDK1.6
- js报错:****is not a function 的解决方法
- .NET中常用数据库连接串
- 在淘宝购台电7寸MP5的体会
- C++ 文件类型说明
- https://httpsplider.googlecode.com/svn/trunk/
- 面向对象的设计原则简述