正版管家婆马报彩图|香港管家婆马报彩图|香港管家婆牛魔王彩图

热门关键词: 正版管家婆马报彩图,香港管家婆马报彩图,香港管家婆牛魔王彩图

您的位置:正版管家婆马报彩图 > 综合资讯 > 关于TrueType字体的布局,字库移植并能展现粤语

关于TrueType字体的布局,字库移植并能展现粤语

发布时间:2019-10-10 07:24编辑:综合资讯浏览(91)

    有关TrueType字体的组织 (载入中...)

    原文

    TrueType字体常常包括在单个TrueType字体文件中,其文件后缀为.TTF。OpenType字体是以看似于TrueType字体的格式编码的POSTSC昂科雷IPT字体。OPENTYPE字体使用.OTF文件后缀。OPENTYPE还同意把多少个OPENTYPE字体组合在三个文书中以利于数据分享。这几个字体被叫作TrueType字体集(TrueType collection),其文件后缀为.TTC。TrueType字体用machintosh的轮廓字体能源的格式编码,有一个独一的标识名"sfnt"。windows未有macintosh的位图字体财富格式,字体目录包蕴了字体魄式的版本号和多少个表,每一个表都有二个tableentry结构项,tableentry结构包括了能源标志、校验和、偏移量和各类表的高低。上边是TrueType字体目录的c语言定义:typedef sturct{char tag[4];ULONG checkSum;ULONG offset;ULONG length;}TableEntry;typedef struct{Fixed sfntversion; //0x10000 for version 1.0USHORT numTables;USHORT searchRange;USHORT entrySelector;USHORT rangeShift;TableEntry entries

     

    本文介绍的是Qt 字库移植并能显示中文,供给的字体库文件,平日是五个。具体移植那么些,看你使用的字库是怎么着了,先来看内容。

    AD:

     

     

    解析 Qt 字库移植并能显示汉语(下篇)是本节介绍的源委,接着上篇 浅析 Qt 字库移植并能呈现普通话(上篇)一连介绍,烂来看本节内容。

    1、三种格式字库的简要介绍

    QT扶助各个格式的字库(TTF,BDF,PFA/PFB,QPF)(见参考文献[3]),但在产品中,固然一向行使,TTF或PFA/PFB。即让应用程序在彰显的时候再总计点阵,最后的效果并不出彩,会意识有一点字大,某个字小,况且必要占用较多的FLASH和内部存款和储蓄器,速度也可能有一些慢,所以本身在此不想过多的介绍PFA/PFB。固然直接运用BDF,速度不快,並且须求占用相当多的FLASH和内部存款和储蓄器;使用QPF,速度和占用其余能源是极小的,因而大家最终的产品中运用QPF格式。上面我归纳介绍,TTF,BDF和QPF字体的组织,那样就相比较轻巧精通前边的转移进度。

    (1)TTF字体

    TTF(TrueType Font)是Apple公司和Microsoft公司协助举行推出的字体文件格式,随着Windows的风靡,已经济体改成最常用的一种字体文件表示方法。TTF 字体已经成作用在Windows汉语版生成汉字字库,此字体选取三遍B样条曲线来汇报字符轮廓,对字符概略的上的点,按顺时针方向从小到大编号,填充部分在其动手。TTF文件结构分为多个部分:文件名(12Bytes),描述表目录(各类16Bytes),描述表数据。

    对于每一个字,都有一个假想的矩形框,不奇怪状态字是不会压倒这几个矩形框的,中文属于象形字,不象斯洛伐克(Slovak)语,大小不相同样,比如:俄文中的f就大概会胜出矩形框。微软把矩形的中度称为EM,实际字符的中度称为BODY.矩形框最原始的坐标系是矩形的中坚为原点,但为了实际字体在打字与印刷和出示的运用进程中的方便,经常将坐标原点放在左下角,或中下。

    平常说来,在骨子里打字与印刷进度中,TTF字体是用像向来衡量的,怎样将矩形框中的字体转成像素呢?有贰个计算公式,实举个例子下:借使二十一个点的72点每英寸屏下有贰个550的长短,矩形框内有2046个单位。这其像素为550*18*72/72/2048=4.83像素。鲜明,每英寸里的点取的越来越多,字就越逼真,同有的时候候这样的仓库储存空间和计算的时日也就更加多。在松手程序开辟进度中,那往往是不基本上能用的,因为嵌入式系统的硬件能源本来就很有限,假诺确实那样的话,在显示进度会极慢。並且只要为了增加速度而减弱每英寸中的点数,则字体失真的情况相当的悲凉。尤其具体的关于,TTF字体的原委可以看到参谋资料[3]。

    别的,在Windows下编制程序,Microsoft达成了让客商对字体操作管理具备透明性,有关字体结构定义见参谋文献[4]。

    (2)BDF字体

    BDF(Bitmap Distribution Format)是在X窗口系统中的一种象征位图字体的文件格式。是X组织定义的一种规范,是ASCII文件它由两片段构成,一是意味字体全部质量的文书头音信;二是每多少个字符唯有的习性和位图数据。笔者以16*16的位图字体为例描述BDF字体文件格式。

    1. STARTFONT2.1 /*前边跟一个本子号,提议该字体文件版本*/  
    2. COMMENT /*表示注释*/  
    3. FONT -adobe -courier -bold -r -normal -16 -160 -75 -75 -m -160 -gb2312.1980 -0   
    4. /*代表字体名*/  
    5. SIZE 16 75 75 /*字符大小与在X,Y方向上的分辨率*/  
    6. FONTBOUNDINGBOX 16 16 0 0 /*X方向上大幅度与Y方向中度及x和Y方向上的舞狮*/  
    7. STARTPROPERTIES 16 /*安装字体的性质项目数*/  
    8. FOUNDRY "Adobe" /*字体的造作商家*/  
    9. FAMILY_NAME "Courier" /*字体的变种字型*/  
    10. WEIGHT_NAME "Bold" /*字体的印刷权*/  
    11. SLANT "R" /*字体字型的宏图意况*/  
    12. SEWINDTH_NAME "Normal" /*字体的缩放因素*/  
    13. ADD_STYLE_NAME "" /*独一的标志该字体,日常为空*/  
    14. PIXEL_SIZE 16 /*依傍于设备的书体尺寸*/  
    15. POINT_SIZE 160 /*设计字体的骨子里尺寸*/  
    16. RESOLUTION_X 75 /*规划字体的程度分辨率*/  
    17. RESOLUTION_Y 75 /*设计字体的垂直分辨率*/  
    18. SPACING "m" /*提议字符宽度是定长如故可变*/  
    19. AVERAGE_WIDTH 160 /*字体中有所字符的平分宽度*/  
    20. CHARSET_REGISTRY "gb2312.1980" /*字符集名*/  
    21. CHARSET_ENCODING "0" /*字符集编号*/  
    22. FONT_DESCENT 0 /*基线下的万丈*/  
    23. FONT_ASCENT 16 /*基线上的莫大*/  
    24. ENDPROPERTIES /*品质项设置实现*/  
    25. CHAR 6775 /*字体文件中的字符数*/  
    26. STARTCHAR 啊 /*字符早先标记及称号*/  
    27. ENCODE 3021 /*X服务器在存取该字符时使用的编码。如汉字国家标准码*/  
    28. SWIDTH 1000 0 /*X和Y方向上的逻辑宽度和惊人*/  
    29. DWIDTH 16 0 /*字符在x和Y方向上的器械单位宽度*/  
    30. BBX 16 16 0 0 /*字符边界框的宽度,中度以致偏移*/  
    31. BITMAP /*字符的位图的信息伊始标识*/  
    32. 0000 /*字符位图*/  
    33. 04a0  
    34. ……  
    35. 0590  
    36. ENDCHAR /*字符结束标记*/  
    37. STARTCHAR 阿 /*其次个字符开端*/  
    38. ……  
    39. ENDFONT /*BDF字体文件结束标记*/ 

    (3) QPF字体简单介绍

    QPF格式的字库是仅用于QT/Embedded的不得缩放的字体,在程序运营进度中,对TTF格式的字体,在第二遍装入使用时,都要以给定的字体大小进行拍卖;而对于BDF字体,当其应用时,全部字体都不能够不被拍卖;而对于QPF字体,均以一样格式的蕴藏。所以在字体显示时,Qt一旦读取字体,做相应深入分析,然后展现就完毕了,那样进一步减少了对RAM财富的萧条。QPF字体是基于UNICODE编码的,那为QT/Embedded突出的可移植性奠定了基础。有关QPF更详细的资料能够查看参照他事他说加以考察文献[5]。

    2、怎么样从TTF字体文件转成QPF字体文件

    (1)把TTF转换成BDF

    就算不引入应用TTF格式的字库,但出于TTF格式的字库能够转变来放肆大小的BDF字库,而得以找到的BDF字库都以永久大小的,因而在骨子里制作QPF字体文件时,依旧需求TTF格式的字库。把TTF转变到BDF的措施如下:

    1. ./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以升序排列。

    1. Type Name Description   
    2. ULONG  tag 4字节的标志   
    3. ULONG checkSum 表中的CheckSum   
    4. ULONG offset TrueType font文件的早先偏移量Offset   
    5. ULONG length 表长  

    再有贰个有关Offset表的音信,包蕴版本号,表的多少,查找范围。入口采用,转换范围。

    因此操作文件表,将叙述表中的数据抽出来,依据BDF字体所定义的格式写入,就足以生成对应的书体。譬喻,能够付出一小段c语言程序,此程序用于总计当前CheckSum的义务。

    1. ULONG  
    2. CalcTableChecksum(ULONG *Table,ULONG Length)  
    3. {  
    4. ULONG Sum = 0L;  
    5. ULONG *Endptr=Table ((Length 3)& ~3)/sizeof(ULONG);  
    6. while(Table<EndPtr)  
    7. Sum  = *Table ;  
    8. 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是定点大小的,所以在改变进程中无可置疑汇合世失真的状态。

    (2)对获取的BDF文件实行调治

    出于从软件xmbdfed里拿走的多个字库不相符系统的必要,因而要求手动对其进行局地调解,另外措施获得的BDF文件无需打开调度。

    直接从xmbdfed里拿走的字库是遵守GB2312-80.0实行编码的,因而首先要将其转变来切合UNICODE编码,那亟需用到本身手动写的五个程序 gb2unieode,把源文件拷贝到gb2unicode程序的目录下,将其名字改为hanzist24a.txt(程序的需要,也足以不改名字而修改程序里源文件的名字再重新编写翻译),然后运维./change之后,就落成了,因为QT中因现有的转变函数能够调用,在此作者不想多说关于用程序转变的代码。因为有一种更简约的情势,即在Word中开荒GB字库。然后另存为UNICODE字库文件就行了。

    等待该命令实行完后(注意供给的年月比较长),对所生成的文书dest.txt实行排序,方法如下:把dest.txt的名字改为dest.bdf(只要后缀名叫bdf就行);然后运营软件xmbdfed,用其开辟该公文(xmbdfed只好一向张开后缀明为bdf的文件),另存为 yourname.bdf就能够。排完序后供给手动修改管理yourname.bdf。

    由地方介绍的BDF字体魄式,未来对转移得到的BDF字体文件进行如出手工业处理:先删除行表明属性暗中同意的字符的行DEFAULT_CHAR8481,因为从GB2312调换到UNICODE后,编码为8481的字符已经不设有了,假如不删除该行,运转时会出现段错误。然后删除那多少个存在于八个16号字库但在正规GB231第22中学从不的有的字样。标准GB231第22中学有74四十四个字模,而三个16字库有76拾三个字模,多出来的这部分在用 gb2unicode调换的时候因为找不到对应的GB2312码而尚未写进dest.txt的字样最初行"STARTCHA昂Cora ****"。能够用xmbdfed张开,假诺出错则印证还或者有一部分不完全的字样,还须求手动删除这些不完整的字样,借使可以正确展开则证实指标文件已是科学的。(24号字库荒诞不经那么些主题材料,由此无需开展本项操作。)最后从任何大小同等的.bdf文件中拷贝编码为20-7F(ASCII码)和编码为 FE54(分号;)的字样到指标文件。

    (3)把TTF.BDF转换成QPF

    从参照他事他说加以考察文献[5]中能够领悟QT提供的把TTF,BDF转换到QPF的主意有三种,一种是工具makeqpf,那几个命令无论是在Pc机上或许在开采板上都未曾效应(不过QT的官方网站却实属能够的,不清楚为啥,并且,亦非种种版本的QT都有makeqpf这么些工具,还要表达的是,文献[6]中说那一个工具是能够的,可是自辛亥有考试成功)。

    另一种是运行应用程序时累加选项-savefonts,如在开垦板上运维应用程序的指令:./sulfur -qws -savefonts

    设若那时系统中/usr/qt/lib/fonts目录下并未有QPF格式的字库而只有TTF或BDF格式的字库,对应的公文fontdir中只保留要转变的文件的行,QT就能在运行时首先生成QPF格式的字库。尽管通过TTF字体也得以获得QPF字体,可是最棒不用这么做,因为失真太大。

    小结:Qt 字库移植并能展现汉语(下篇)的剧情到那边就介绍完了,经过自家对字库进展上述管理后,就足以在嵌入式开采板上显得各样字体,只要找到给定TTF或BDF的字库,要是找不到BDF字库,能够找到字库,下一场经过TTF2BDF那个顺序来获得BDF字库。那样在开荒板上能够来得草书,石籀文等字体,並且字体展现也很正规,不会合世大小不等同的主题材料。可是,本身认为,由于那是嵌入式开荒,存款和储蓄财富非常不难,假如能更为将字库压缩,只留下程序中所要用的汉字组成的字库就好了,那是索要下一步商讨的大势。末了希望本文能帮你化解问题。

     

    本文由正版管家婆马报彩图发布于综合资讯,转载请注明出处:关于TrueType字体的布局,字库移植并能展现粤语

    关键词: 香港管

上一篇:自个儿去吉林

下一篇:没有了