the 基于freetype 嵌入式矢量字体引擎的研究guide download
一种领域专用的规则引擎设计与实现
![一种领域专用的规则引擎设计与实现](https://img.taocdn.com/s3/m/9c98302f7f1922791788e87f.png)
第20卷第3期信息工程大学学报Vol.20No.32019年6月Journal of Information Engineering UniversityJun.2019㊀㊀收稿日期:2018-07-04;修回日期:2018-09-14㊀㊀基金项目:国家自然科学基金资助项目(91430214,61732018)㊀㊀作者简介:陈孟东(1984-),男,工程师,博士,主要研究方向为计算机体系结构㊂DOI :10.3969/j.issn.1671-0673.2019.03.009一种领域专用的规则引擎设计与实现陈孟东,王㊀宇,谢向辉,吴㊀东(数学工程与先进计算国家重点实验室,江苏无锡214125)摘要:在身份认证协议中,安全字符串是必需的㊂安全字符串的恢复是一个反向的过程,通过在大量候选字符串上做计算并验证,找到丢失或遗忘的正确字符串㊂在反向的恢复过程中,需要根据变换规则对字符串进行快速处理,生成新的字符串㊂针对上述需求,首次提出用硬件加速变换规则的处理过程,并在现有的FPGA 平台上,设计实现领域专用的规则引擎㊂实验结果表明,在单个Xilinx Zynq XC7Z030FPGA 上实现的该规则引擎的处理性能优于CPU ,性能功耗比相比GPU 有3倍的提升,相比CPU 有50倍的提升,有效提升了规则处理的速率和能效㊂关键词:字符串;规则;引擎;领域专用中图分类号:TP391.9㊀㊀㊀文献标识码:A文章编号:1671-0673(2019)03-0302-06Design and Implementation of A Domain-Specific Rule EngineCHEN Mengdong,WANG Yu,XIE Xianghui,WU Dong(State Key Laboratory of Mathematical Engineering and Advanced Computing,Wuxi 214125,China)Abstract :Security strings are often needed in identity authentication mechanism.Security stringsrecovery is a reverse process,which does much calculation on a large amount of possible strings tofind the right one,so that we can recover lost or forgotten strings and regain access to valuable infor-mation.In this reverse process,we need to first process basic strings based on transformation rules,so as to generate new ones quickly.In response to the above requirements,this work puts forward the idea of accelerating the processing of rules using hardware for the first time,and a domain spe-cific rule engine is designed and implemented on the existing FPGA platform.The experimental re-sults show that the performance of the rule engine on a single Xilinx Zynq XC7Z030FPGA is better than that of CPU,its performance power ratio being 3times higher than that of GPU,and 50times higher than that of CPU.The speed and energy efficiency of the rule processing is improved effec-tively.Key words :character string;rule;engine;domain-specific㊀㊀随着计算机技术的发展和互联网规模的扩大,身份认证机制逐渐成为人们保护自身信息安全的重要方式[1]㊂认证过程需要一个用户名和安全字符串组合的身份信息㊂通常使用HASH 算法来计算安全字符串的摘要,并将摘要值与用户凭据一同存储㊂当用户进行身份认证时,其认证系统通过接收用户输入的安全字符串,重新使用HASH 算法把字符串转换成摘要,与系统存储的摘要值进行对比,以此完成认证过程㊂而安全字符串的遗忘会带来不便和损失[2],身份认证协议的分析技术为解决此问题而产生㊂在身份认证协议分析中,需要在短时间内快速㊀第3期陈孟东,等:一种领域专用的规则引擎设计与实现303㊀生成大量的待测试字符串,供后续HASH算法计算摘要值,与存储的摘要值进行比较,进而分析出正确的字符串㊂在快速生成待测试字符串过程中,采用字典加规则的方式是一种非常精准有效的方式[3]㊂通过已有字符串结合对字符串的变换规则,可以生成大量的可能性比较高的字符串,进而提高分析的速率㊁提升精度㊂变换规则种类多,处理过程复杂,是一项计算量大㊁对处理时间要求较高的任务,到目前为止,公开的实现方式都是基于CPU和GPU[4-5]进行处理,在处理速度㊁系统功耗等方面有诸多不足㊂本文针对身份认证协议分析中的规则处理,提出一种全硬件实现的㊁高能效的㊁可重构的规则处理架构,实现了一种领域专用的规则处理加速器㊂本文的研究基于Xilinx Zynq FPGA实现,实验结果表明该引擎在处理性能㊁系统功耗等方面表现良好㊂1㊀相关研究现状1.1㊀身份认证协议分析中的规则人在设置安全字符串时基于一个基础加以简单变换形成新的字符串,如增加前缀㊁增加后缀等,这种变换称为变换规则[4-5]㊂这种基于规则的方式为身份认证协议的分析提供了一个思路:收集已知的安全字符串形成一个字典,分析时在该字典中尝试,相比于全字符搜索空间,可显著减少计算量并保证较高命中率;同时对字典加以规则变换又可生成新的字符串,扩大字典的覆盖空间,提高命中率㊂精妙设置的字典结合规则,可以在满足搜索规模㊁时效等限制时,显著提升分析的命中率㊂在身份认证协议分析中,业内有许多总结积累而成的字符串变换规则,多个工具有自己支持的规则,并提供字典加规则的分析模式㊂John the Ripper[4]是一款开源且免费的密码分析软件,其主要目的是用来分析弱的Unix口令,现已支持100多种算法,提供对多种不同类型系统架构的支持,包括Unix/Linux㊁Windows/DOS模式和OpenVMS等㊂它支持字典分析模式,并支持10类40余种字符串变换规则及其处理,其规则处理在CPU上进行㊂文献[6-7]使用John the Ripper及其自带的变换规则进行身份认证协议分析,分析过程包括规则处理过程都是在CPU上软件实现㊂Hashcat[5]是一款多平台的免费分析套件,应用广泛,支持包括CPU㊁GPU(支持NVIDIA GPU和AMD GPU)㊁DSP㊁FPGA等包含OpenCL运行时的各种平台,支持Linux㊁Windows㊁MacOS多种操作系统,支持分布式处理,支持近200种算法,支持多种分析模式,支持字典与规则的处理,其规则的处理过程主要在CPU和GPU上进行㊂文献[8]使用hashcat及其自带的规则进行研究,试验在Intel Xe-on CPU上进行,论文统计了完整分析过程的性能,没有统计单独的规则处理时间,没有功耗相关的研究数据㊂文献[9-12]都采用hashcat中字典加规则的分析方式进行试验,但都是基于GPU平台,也没有进行系统功耗方面的研究㊂以Hashcat所用的规则为基础,选取常用的基本变换规则41种进行研究,并实现其加速引擎,表1列出了几种典型的变换规则,每个规则各自以1个可见字符为其助记符,有的规则需要携带参数,参数个数从0到3个不等㊂表1以字符串p@ ssW0rd为输入,举例说明了规则的变换结果㊂表1 规则及其含义助记符定义实例变换结果u所有字母大写u P@SSW0RDr倒序r dr0Wss@ppN整体重复N遍作为后缀p2p@ssW0rdp@ssW0rdp@ssW0rd {循环左移{@ssW0rdpDN去除N位置的字符D3p@sW0rdiNX在N位置插入字符X i4!p@ss!W0rd sXY所有的X替换为Y ss$p@$$W0rd∗XY交换X㊁Y位置的字符∗34p@sWs0rd+N N位置字符在ASCII表序中增加1位+2p@tsW0rd 在实际使用中,单个的规则可以组合在一起共同进行一次变换,例如uD3ss$为3个规则组合的情况,所有规则处理结束后生成1个新的字符串㊂1.2㊀高效能的规则处理加速平台身份认证协议的分析过程需要对可见字符构成的字符串空间进行搜索计算,从而找到正确的字符串,在字符串长度增加时,其搜索的空间以及计算量都呈指数级增长,而且分析运算中包含了大量计算密集型模块,单个计算节点的计算能力无法满足需求㊂即便是在字典加规则的具有一定针对性的分析模式中,字典的条目数和规则的数量也是非常庞大的,以1个5千万条目的字典和1个10万条目的㊁每个条目由3个基本规则组合形成的规则文件为例,仅仅规则的处理过程就需要生成5ˑ1013个新的待测试字符串,计算量庞大,以最为简单的304㊀信息工程大学学报㊀2019年㊀MD5算法为例,在单个通用CPU上完成分析过程,其时间仍然需要十几天㊂可见,单个计算节点的计算能力与身份认证协议的分析任务仍有较大差距㊂通常的做法是构建大规模的计算集群,将搜索的空间进行划分,形成不同的计算任务,各个节点在自己的任务空间中进行搜索计算,以此来加速整个分析过程㊂在构建大规模的分析集群时,性能和功耗是两个主要关注的问题㊂规则处理以及身份认证协议分析都是计算复杂型的任务,通用CPU的计算能力已远远不能满足需求,在性能提升上已经遇到了瓶颈㊂GPU加速单元的出现使得其在性能方面具有明显优势,在处理集成度高㊁计算密集型等问题时的理论计算性能已经大幅超过了通用处理器[13]㊂但是,GPU作为加速设备也出现了问题,尤其是在构建大规模的计算系统时,其构建成本㊁频率墙㊁功耗墙㊁存储墙等问题使得GPU高成本㊁高功耗的特点已经无法忽视[14]㊂专用ASIC集成度高㊁处理性能高,但是开发复杂㊁成本高,且其功能一旦实现,不能更改,不适合应用于规则的加速处理㊂FPGA具有低功耗㊁高并行的特点,它既能提升计算速率,又可使功耗保持在可接受的范围[14-16]㊂其广泛应用以及可重构特性,为其在规则加速处理中的应用提供了基础㊂其功耗低㊁并行度高㊁扩展性强的特点,使它适合应用于规则的加速处理以及整个身份认证协议的分析㊂本文聚焦处理性能和能效,针对基于FPGA的规则处理技术进行研究,设计并实现一种规则引擎㊂2㊀规则引擎设计规则引擎以全硬件实现的方式对规则的解析处理进行加速㊁处理时,软件只需配置好规则与字典文件的大小以及存储位置,规则引擎便可以自动从片外获取规则和字典,并解析处理,生成新的字符串㊂新生成的字符串可以通过高速总线写回片外存储空间,供其他应用使用,也可以在片内集成HASH验证算法,直接验证字符串的正确性,进而完成整个身份认证协议的分析过程㊂2.1㊀加速平台结构本文的规则引擎基于一个完整的身份认证协议分析系统实现,该分析系统是一个大规模的可重构的计算集群,其计算能力来自大量低功耗可重构Xilinx Zynq XC7Z030[17]芯片㊂该芯片是一个混合核心处理器,包含了通用嵌入式计算核心(主频为1GHz的双核ARM CortexTM-A9处理器)和基于FPGA的可重构计算核心㊂两种异构计算资源通过高速的互连总线紧密耦合,可以支持通用计算任务和加速计算任务的并行协同执行㊂混合核心处理平台外围集成了1GB的低功耗DDR内存㊁32 GB的Flash存储器㊁千兆以太网接口㊁高速环形网接口等㊂基于Zynq XC7Z030的计算平台结构如图1所示,其实物图如图2所示㊂图1㊀硬件平台结构图图2㊀硬件平台实物图规则引擎在单个Zynq XC7Z030的可重构FP-GA上实现,大规模系统中的每个FPGA内都可以集成规则引擎,规则文件和字典文件按计算任务划分后存储在片外的低功耗DDR内存中㊂2.2㊀数据格式设计在基于规则的身份认证协议分析中,需要将大量的变换规则组织成规则文件㊁将常用字符串组织成字典文件进行存储与使用㊂在硬件实现规则引擎过程中,考虑扩展需求㊁存储空间限制以及规则的可读性,每个规则都采用8比特定长进行编码,直接以助记符的ASCII码作为规则的编码,8比特编码理论上最多可以支持256种规则,为将来规则的新增扩展预留了空间,现有规则采用ASCII码编码存储,保证了规则文件的可读性,减少了软硬件间编译转换的工作量㊂实际进行字符串变换时,常为多个规则的组合情况,设计硬件存储空间时,考虑规则组合及规则携带参数情况,为每次变换分配40字节的存储空㊀第3期陈孟东,等:一种领域专用的规则引擎设计与实现305㊀间㊂通常每个字典文件中的字符串长度相同,硬件逻辑中为每个字典条目分配32字节的存储空间,即字符串的长度最大为32㊂规则文件与字典文件格式及其在硬件中存储形式如图3所示㊂图3㊀规则文件与字典文件存储格式2.3㊀处理核心设计规则处理就是对规则进行译码,然后对字符串进行变换,生成新的字符串的过程㊂由于不同的变换规则会改变字符串的长度,即使输入字符串长度相同,输出字符串仍会长度不同,给后续的使用带来困难㊂解决的办法是:对字典文件进行分类,每次处理的字典文件中都是相同长度的字符串,处理时,首先针对一个规则,循环字典文件中所有的字典条目,这样,生成的新字符串的长度都是相同的,给后续HASH 流水线的使用带来便利㊂然后更换规则,重新获取字典并对字典进行循环,直至所有的规则处理完毕㊂对于规则组合在一起共同对字符串施加变换的情况,后面规则的处理依赖于前面规则的处理结果,规则只能严格按顺序执行㊂在设计过程中,针对每个规则的执行时间进行了优化,将每一个规则都在1个时钟周期之内处理完毕,包括规则的解析和字符串的变换㊂这样,每个时钟周期都有一个规则处理完毕,变换由几个规则组合在一起,便需要几个周期来生成一个新的字符串㊂图4描述了3次规则变换,且每次变换是规则3组合,字典条目数为k 时的详细处理过程㊂每次变换由3个基本规则组成,所以每3个时钟周期可以生成1个新的字符串㊂图中的横轴是时间轴,代表时钟周期㊂string 1,string 2,string 3, ,stringk 是一个字典的k个条目,rule 1_1,rule 1_2,rule 1_3是3个基本规则,共同组成了一次变换,rule 2_1,rule 2_2,rule 2_3,rule 3_1,rule 3_2,rule 3_3与此类似㊂string 1_o ,string 2_o , ,stringk _o 是每次变换的输出㊂时钟周期1到n 完成对k 个字典条目的第1次变换,n +1到m ㊁m +1到l 分别完成第2次和第3次变换㊂图4㊀规则处理流程㊀㊀处理核心的逻辑简图如图5所示㊂41种基本规则中的每一种都被设计成一个单独的规则加速单元RPE(Rule Processing Element)㊂外围是预处理电路㊁规则译码电路以及存储管理电路㊂预处理电路负责将连续存放的规则和字典文件分割成规则和字典条目㊂规则译码电路对每次变换的基本规则进行逐一译码,然后选择相应的规则加速单元进行运算㊂每个加速单元根据输入的字符串以及字符串长度信息进行新字符串的生成工作㊂存储管理电路负责使用高速总线从片外获取规则和字图5㊀处理核心逻辑图306㊀信息工程大学学报㊀2019年㊀典文件,形成片上的各级缓存,以及将生成的新字符串输出至片外㊂41种基本规则的处理逻辑组成1个处理核心,根据硬件资源的限制,在规则引擎内部可以放置1个或者多个处理核心同时工作,每个核心各自取规则和字典进行变换㊂2.4㊀存储设计规则引擎自动进行规则和字典的存取,为满足高速引擎对规则和字典的速率需求,共设置3级存储结构㊂第1级存储:片外DDR㊂整个规则文件和字典文件都存储在DDR中,Zynq中的CPU将规则文件和字典文件在DDR中的起始地址以及大小信息配置到FPGA逻辑,硬件自动进行规则的获取㊂同时,如果需要将规则引擎处理生成的新字符串传到片外供其他应用使用,则新生成的字符串也是由规则引擎自动传输到DDR内存中㊂第2级存储:片内RAM㊂FPGA内部的规则引擎通过AXI(高级可扩展接口,Advanced eXtensi-ble Interface)总线将规则与字典分批预取入FPGA 内部后,缓存于片内RAM中㊂AXI总线的4个高性能接口AXI_HP工作于150MHz时,总带宽可达到4.8GB/s,可保证对规则引擎的高速供数㊂随着处理逻辑不断消耗RAM中的数据,规则引擎会不断从片外获取数据,保证处理逻辑的需求㊂第3级存储:片内FIFO㊂处理逻辑从片内RAM获取字典数据,进行预处理,将字典再存入片内FIFO缓存中,供核心处理逻辑进行高速处理㊂3㊀实验与结果为验证所设计规则引擎的功能正确性和性能指标,在基于Zynq XC7Z030芯片的硬件平台上,通过Vivado(v2015.2)工具套装进行开发实现㊂对不同的处理核心数量㊁不同的字符串长度㊁不同的规则组合等情况进行测试,分析其性能和功耗情况,并与其他平台的运行结果进行对比和分析㊂3.1㊀硬件实现结果通过Vivado工具,对设计进行综合与实现,根据硬件资源的限制,分析最多可放置的处理核心数量及整体处理性能㊂处理性能以变换为1个基本规则组合时每秒可以生成的新字符串个数计算㊂结果显示,最高实现频率150MHz,片上最多可以放置的核心数量为2,所以最大的处理能力是每秒处理300M个基本规则,生成300M个新字符串㊂在放置单个处理核心情况下,资源占用为42%,仍有足够的资源放置HASH算法流水线,可以用于片内的验证工作㊂如果在片内放置2个规则引擎处理核心,此时,资源占用约为80%,片内已不能放置HASH算法流水线,规则引擎可用于将生成的新字符串传输到片外,供其他应用使用㊂3.2㊀性能与功耗对比本文首次采用FPGA以硬件的方式进行规则的解析处理工作,性能和功耗的对比是同CPU和GPU上的软件实现进行㊂将相同的规则文件和字典文件分别在CPU和GPU上运行,并与本文的规则引擎的结果进行对比分析,对比从处理性能和功耗两个角度进行㊂软件实现采用最新的hashcat4.1.0进行, hashcat是业界最快的分析工具,支持CPU和GPU 平台[5]㊂软件的结果与其运行平台有很大关系,如NVIDA GPU中其桌面产品和专门用于高性能计算的产品,计算能力差距非常巨大㊂本文选取主流偏上的产品平台进行试验,采用的CPU平台为: Intel(R)Core(TM)i7-6700CPU@3.40GHz, 32G内存,GPU平台为:NVIDIA GeForce GTX 970,1664个处理核心,1.18GHz主频㊂性能的对比结果如图6所示㊂对于规则组合情况,在每种平台上分别测试了1个规则㊁3个规则㊁9个规则组合成1次变换的情况㊂对于字典中字符串的长度,测试了长度为8字节和12字节的情况㊂通过分析可以发现:对于不同的字典长度,3种平台的处理性能都不受影响;处理性能受规则组合情况影响很大,规则组合越多,处理越复杂㊂本文的规则引擎处理性能在规则1组合情况下可以达到每秒生成300M个新字符串,其性能优于CPU实现,差于GPU实现㊂然而,当使用该规则引擎来构建大规模㊁低功耗的规则处理系统时,其计算能力会显著增加,但这不是本文的工作㊂图6㊀规则引擎与不同平台的性能对比在实际运行过程中,对规则引擎和GPU平台㊀第3期陈孟东,等:一种领域专用的规则引擎设计与实现307㊀的运行功耗进行实时观测,CPU的功耗以65W计算,计算性能功耗比(每瓦特每秒可以处理的规则数量),结果如图7所示㊂规则引擎的运行功耗仅为2W,其性能功耗比相比于GPU有3倍的提升,相比于CPU有50倍的提升㊂可以看出,本文的规则引擎处理速度快㊁功耗低,非常适合构建大规模的规则处理系统㊂图7㊀规则引擎与其他平台的能效对比4㊀结束语字符串变换规则的处理是身份认证协议分析中的重要部分,其处理过程复杂,对处理性能㊁系统功耗有很高要求,本文针对这些需求,首次提出以全硬件的方式进行规则处理的加速,有效利用FP-GA高并行㊁低功耗的特点,构建了规则引擎,并进行了设计实现,实验结果表明,规则引擎在Zynq XC7Z030FPGA上运行性能优于Intel i7-6700 CPU,性能功耗比相比NVIDIA GeForce GTX970 GPU提升3倍,相比CPU提升50倍,有效提升了规则处理的速率和能效㊂此规则引擎处理性能高㊁系统成本低㊁运行功耗低,特别适合构建大规模㊁分布式㊁可重构的规则处理系统,进而为整个身份认证协议分析系统的设计实现提供基础㊂参考文献:[1]谢全泉.异构平台下口令恢复任务决策机制研究[D].郑州:郑州大学,2016.[2]WU Z Y,CHIANG D L,LIN T C,et al.A reliable dy-namic user-remote password authentication scheme over insecure network[C]//Advanced Information Networking and Applications Workshops(WAINA).201226th In-ternational Conference on.IEEE,2012:25-28. [3]OLSON E.Robust dictionary attack of short simple sub-stitution ciphers[J].Cryptologia,2007,31(4):332-342.[4]Openwall.John the ripper password cracker[EB/OL].[2018-03-11]./john/doc/.[5]STEUBE J.Hashcat advanved password recovery[EB/OL].[2018-03-11].https:///hashcat/.[6]CHOU H C,LEE H C,YU H J,et al.Password crack-ing based on learned patterns from disclosed passwords [J].International Journal of Innovative Computing Infor-mation&Control Ijicic,2013,9(2):821-839. [7]FAHL S,HARBACH M,ACAR Y,et al.On the eco-logical validity of a password study[C]//Symposium on Usable Privacy and Security,2013:1-13.[8]HUH J H,OH S,KIM H,et al.Surpass:system-initia-ted user-replaceable passwords[C]//Proceedings of ACM Conference on Computer and Communications Se-curty,2015:170-181.[9]MILO F,BERNASCHI M,BISSON M.A fast,GPU based,dictionary attack to OpenPGP secret keyrings[J].Journal of Systems&Software,2011,84(12):2088-2096. [10]XU L,GE C,QIU W,et al.Password guessing basedon LSTM recurrent neural networks[C]//IEEE Inter-national Conference on Computational Science and Engi-neering.IEEE,2017:785-788.[11]FLOR N C I O D,HERLEY C.An administrator sguide to internet password research[C]//Proceedings ofthe28th USENIX conference on Large Installation Sys-tem ENIX Association,2014:35-52.[12]UR B,SEGRETI S M,BAUER L,et al.Measuring re-al-world accuracies and biases in modeling passwordguessability[C]//Usenix Conference on Security Sym-ENIX Association,2015:463-481. [13]QIU W,GONG Z,GUO Y,et al.GPU-based high per-formance password recovery technique for hash functions[J].Journal of Information Science&Engineering,2016,32(1):97-112.[14]LI X,CAO C,LI P,et al.Energy-efficient hardwareImplementation of LUKS PBKDF2with AES on FPGA[C]//2016IEEE Trustcom/Big DataSE/I SPA.IEEE,2016:402-409.[15]CHAVES R,KUZMANOV G,SOUSA L,et al.Cost-efficient SHA hardware accelerators[J].IEEE Transac-tions on Very Large Scale Integration(VLSI)Systems,2008,16(8):999-1008.[16]ABBAS A,VOβR,WIENBRANDT L,et al.An effi-cient implementation of PBKDF2with RIPEMD-160onmultiple FPGAs[C]//201420th IEEE InternationalConference on Parallel and Distributed Systems(IC-PADS).IEEE,2014:454-461.[17]XILINX.Zynq-7000all programmable SoC[EB/OL].[2018-03-11].https:///support/docu-mentation/product-briefs/zynq-7000-product-brief.pdf.(编辑:颜峻)。
甲骨文图文编辑系统的设计与实现
![甲骨文图文编辑系统的设计与实现](https://img.taocdn.com/s3/m/60a3113a7275a417866fb84ae45c3b3567ecddfc.png)
甲骨文图文编辑系统的设计与实现栗青生;王蕾【摘要】Graphics and text editors is one of a basic functions in print and publish system. This paper analyzed the Shotages of common edit in Jiaguwen charalber and Graphics print, and put forward a kind of new method and theory about Jiagwen charalber dynamic editing , and designed a dynamic description database of Jiagwen charalber. The Graphic typesetting system based on Jiaguwen charalber's dynamic editing dynamic editing were developed, and the problems in Jiaguwen charalber inputing, editing and priming that have plagued people for many years were resolved.%图文编辑是现代印刷出版系统的基本功能之一,本文针对现代通用的图形编辑工具在甲骨文图文印刷方面的不足,提出了甲骨文字形动态编辑的理论和方法,设计了甲骨文字形动态描述库,开发了基于字形动态编辑的图文排版系统,解决了困扰人们多年的甲骨文字形输入、编辑和印刷方面的难题。
【期刊名称】《安阳师范学院学报》【年(卷),期】2011(000)005【总页数】4页(P69-72)【关键词】甲骨文;图文编辑;字形描述;笔画编辑【作者】栗青生;王蕾【作者单位】安阳师范学院计算机与信息工程学院,河南安阳455000;数字化甲骨文工程研究中心,河南安阳455000;安阳师范学院计算机与信息工程学院,河南安阳455000;数字化甲骨文工程研究中心,河南安阳455000【正文语种】中文【中图分类】TP391近年来,随着对汉字研究的深入,甲骨文在现代汉字形成过程中的作用越来越受到专家学者的重视。
《2024年基于嵌入式系统的蒙古文扫描翻译笔相关技术研究》范文
![《2024年基于嵌入式系统的蒙古文扫描翻译笔相关技术研究》范文](https://img.taocdn.com/s3/m/3733732f03768e9951e79b89680203d8ce2f6acb.png)
《基于嵌入式系统的蒙古文扫描翻译笔相关技术研究》篇一一、引言随着科技的不断进步,嵌入式系统在各种应用中得到了广泛的应用。
蒙古文扫描翻译笔作为一种将蒙古文文字识别技术与翻译技术相结合的嵌入式系统设备,其在日常生活中得到了广泛的关注和需求。
本文将探讨基于嵌入式系统的蒙古文扫描翻译笔的相关技术研究,分析其发展现状及未来趋势。
二、蒙古文扫描翻译笔的技术原理蒙古文扫描翻译笔主要基于光学字符识别(OCR)技术和自然语言处理(NLP)技术。
其中,OCR技术用于将扫描到的蒙古文文字转化为数字信息,NLP技术则用于对转化后的信息进行语义分析和翻译。
此外,嵌入式系统技术为蒙古文扫描翻译笔提供了硬件支持和系统集成。
三、蒙古文扫描翻译笔的识别技术(一)蒙古文字符的识别蒙古文字符的识别是蒙古文扫描翻译笔的核心技术之一。
通过高精度的光学传感器和图像处理技术,将扫描到的蒙古文文字转化为数字图像,并利用机器学习算法进行字符识别。
为了提高识别率,还需要不断优化算法和提高硬件设备的性能。
(二)上下文语义的理解与处理上下文语义的理解与处理是提高蒙古文扫描翻译笔性能的关键。
通过自然语言处理技术,对识别出的蒙古文文字进行语义分析和理解,以实现更准确的翻译和表达。
同时,结合上下文信息,提高翻译的准确性和流畅性。
四、蒙古文扫描翻译笔的嵌入式系统设计(一)硬件设计嵌入式系统的硬件设计是蒙古文扫描翻译笔的基础。
主要包括主控芯片、传感器、存储器、电源等部分。
主控芯片负责整个系统的控制和数据处理,传感器用于获取蒙古文文字的图像信息,存储器用于存储识别和翻译结果,电源则保证设备的正常工作。
(二)软件设计软件设计是实现蒙古文扫描翻译笔功能的关键。
主要包括操作系统、驱动程序、算法库和应用软件等部分。
操作系统负责管理硬件资源和提供软件运行环境,驱动程序则用于控制硬件设备的运行,算法库则提供各种算法支持,应用软件则是实现具体功能的软件程序。
五、蒙古文扫描翻译笔的应用与展望(一)应用领域蒙古文扫描翻译笔在多个领域得到了广泛的应用,如教育、旅游、商务等。
freetype库水印字符编码原理
![freetype库水印字符编码原理](https://img.taocdn.com/s3/m/b0d202536d175f0e7cd184254b35eefdc8d315f0.png)
FreeType 是一个开源的字体引擎库,它支持多种字体格式,如TrueType、OpenType、Type 1 等。
当你说到“水印字符编码原理”时,我理解你可能想知道如何使用FreeType 来处理字体,然后将特定的字符或文本作为水印添加到其他图像上。
这个过程涉及到几个步骤,下面我会简单介绍:
选择字体和字符: 首先,你需要选择一个字体文件(例如.ttf 或.otf 文件),然后确定你想要用作水印的特定字符。
加载字体和字符: 使用FreeType 库,你可以加载所选的字体文件,并将特定的字符或文本转换为字形(glyphs)。
每个字形代表一个可视化的字符。
渲染字形: 在将字形渲染到图像上之前,你需要设置一个渲染器。
FreeType 允许你控制字形的许多属性,如大小、间距、抗锯齿等。
通过渲染器,你可以将字形转换为一个位图图像。
添加水印: 一旦你有了字形的位图表示,你就可以将其作为一个水印添加到其他图像上。
这通常涉及到将位图与背景图像合并,可能还要应用一些透明度或混合模式。
保存结果: 最后,你可以将带有水印的图像保存为一个新的文件。
从编码的角度来看,关键的部分是处理FreeType 的API 来加载字体、渲染字形以及将字形合并到背景图像中。
这通常需要一些对C 语言和图像处理基础的理解。
要注意的是,我这里的描述是非常简化的。
实际操作中可能需要处理很多细节,比如处理不同字体的度量、字距调整、色彩管理等。
如果你对具体的实现细节或使用FreeType 的示例代码感兴趣,可以深入研究FreeType 的文档或相关教程。
使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果(转载)
![使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果(转载)](https://img.taocdn.com/s3/m/508552d609a1284ac850ad02de80d4d8d15a0132.png)
使⽤FreeType实现⽮量字体的粗体、斜体、描边、阴影效果(转载)前⾔:Freetype是⼀个跨平台、开源的字体渲染器,⽹上很多⽂章介绍,本⼈就不啰嗦了。
本⽂重点在于实现⽂章标题所属的各种效果,不是Freetype的基本使⽤⽅法介绍⽂档,所以对于Freetype不熟悉的同学们请先学习下Freetype的基本⽤法,才可以使⽤本⽂中所提及的⽅法。
正⽂:⽤FreeType实现⽮量字体的粗体、斜体、描边、阴影效果不是⼀件容易的事,本⼈认为皆因Freetype的接⼝太过于底层化,Freetype没有对其进⾏上层包装,所以要实现这些对于软件/游戏来说的基本效果,都是件挺⿇烦的事情。
不过,问题总是会有解决⽅法的,这些效果的实现,请听本⼈⼀个个道来:1.加粗加粗可以使⽤FreeType中的⼀个API来实现FT_Outline_Embolden,但是这个API不⽀持⽔平垂直⽅向加粗量的分别设置,所以,需要参照FT_Outline_Embolden的实现重新编写⼀个函数,GDI++已经做了这个事情,引⽤它的代码:// 就是FT_Outline_EmboldenFT_Error Old_FT_Outline_Embolden( FT_Outline* outline, FT_Pos strength ){FT_Vector* points;FT_Vector v_prev, v_first, v_next, v_cur;FT_Angle rotate, angle_in, angle_out;FT_Int c, n, first;FT_Int orientation;if ( !outline )return FT_Err_Invalid_Argument;strength /= 2;if ( strength == 0 )return FT_Err_Ok;orientation = FT_Outline_Get_Orientation( outline );if ( orientation == FT_ORIENTATION_NONE ){if ( outline->n_contours )return FT_Err_Invalid_Argument;elsereturn FT_Err_Ok;}if ( orientation == FT_ORIENTATION_TRUETYPE )rotate = -FT_ANGLE_PI2;elserotate = FT_ANGLE_PI2;points = outline->points;first = 0;for ( c = 0; c < outline->n_contours; c++ ){int last = outline->contours[c];v_first = points[first];v_prev = points[last];v_cur = v_first;for ( n = first; n <= last; n++ ){FT_Vector in, out;FT_Angle angle_diff;FT_Pos d;FT_Fixed scale;if ( n < last )v_next = points[n + 1];elsev_next = v_first;/* compute the in and out vectors */in.x = v_cur.x - v_prev.x;in.y = v_cur.y - v_prev.y;out.x = v_next.x - v_cur.x;out.y = v_next.y - v_cur.y;angle_in = FT_Atan2( in.x, in.y );angle_out = FT_Atan2( out.x, out.y );angle_diff = FT_Angle_Diff( angle_in, angle_out );scale = FT_Cos( angle_diff / 2 );if ( scale < 0x4000L && scale > -0x4000L )in.x = in.y = 0;else{d = FT_DivFix( strength, scale );FT_Vector_From_Polar( &in, d, angle_in + angle_diff / 2 - rotate ); }outline->points[n].x = v_cur.x + strength + in.x;//伀偙傟傪僐儊儞僩傾僂僩偟偨偩偗//outline->points[n].y = v_cur.y + strength + in.y;v_prev = v_cur;v_cur = v_next;}first = last + 1;}return FT_Err_Ok;}// 垂直加粗FT_Error Vert_FT_Outline_Embolden( FT_Outline* outline, FT_Pos strength ) {FT_Vector* points;FT_Vector v_prev, v_first, v_next, v_cur;FT_Angle rotate, angle_in, angle_out;FT_Int c, n, first;FT_Int orientation;if ( !outline )return FT_Err_Invalid_Argument;strength /= 2;if ( strength == 0 )return FT_Err_Ok;orientation = FT_Outline_Get_Orientation( outline );if ( orientation == FT_ORIENTATION_NONE ){if ( outline->n_contours )return FT_Err_Invalid_Argument;elsereturn FT_Err_Ok;}if ( orientation == FT_ORIENTATION_TRUETYPE )rotate = -FT_ANGLE_PI2;elserotate = FT_ANGLE_PI2;points = outline->points;first = 0;for ( c = 0; c < outline->n_contours; c++ ){int last = outline->contours[c];v_first = points[first];v_prev = points[last];v_cur = v_first;for ( n = first; n <= last; n++ ){FT_Vector in, out;FT_Angle angle_diff;FT_Pos d;FT_Fixed scale;if ( n < last )v_next = points[n + 1];elsev_next = v_first;/* compute the in and out vectors */in.x = v_cur.x - v_prev.x;in.y = v_cur.y - v_prev.y;out.x = v_next.x - v_cur.x;out.y = v_next.y - v_cur.y;angle_in = FT_Atan2( in.x, in.y );angle_out = FT_Atan2( out.x, out.y );angle_diff = FT_Angle_Diff( angle_in, angle_out );scale = FT_Cos( angle_diff / 2 );if ( scale < 0x4000L && scale > -0x4000L )in.x = in.y = 0;else{d = FT_DivFix( strength, scale );FT_Vector_From_Polar( &in, d, angle_in + angle_diff / 2 - rotate );}//outline->points[n].x = v_cur.x + strength + in.x;//仾偙傟傪僐儊儞僩傾僂僩偟偨偩偗outline->points[n].y = v_cur.y + strength + in.y;v_prev = v_cur;v_cur = v_next;}first = last + 1;}return FT_Err_Ok;}// 新的加粗函数FT_Error New_FT_Outline_Embolden( FT_Outline* outline, FT_Pos str_h, FT_Pos str_v ) {if ( !outline ) return FT_Err_Invalid_Argument;int orientation = FT_Outline_Get_Orientation( outline );if ( orientation == FT_ORIENTATION_NONE )if ( outline->n_contours ) return FT_Err_Invalid_Argument;Vert_FT_Outline_Embolden( outline, str_v );Old_FT_Outline_Embolden( outline, str_h );return FT_Err_Ok;}// 让⼀个字体槽加粗,并且填充其他的⼤⼩属性void New_GlyphSlot_Embolden( FT_GlyphSlot slot , const Vector2Float &embolden){if(embolden == Vector2Float::ZERO)return;FT_Library library = slot->library;FT_Face face = slot->face;FT_Error error;FT_Pos xstr = embolden.x, ystr = embolden.y;if ( slot->format != FT_GLYPH_FORMAT_OUTLINE &&slot->format != FT_GLYPH_FORMAT_BITMAP )return;if ( slot->format == FT_GLYPH_FORMAT_OUTLINE ){FT_BBox oldBox;FT_Outline_Get_CBox(&slot->outline , &oldBox);error = New_FT_Outline_Embolden( &slot->outline, xstr , ystr);if ( error )return;FT_BBox newBox;FT_Outline_Get_CBox(&slot->outline , &newBox);xstr = (newBox.xMax - newBox.xMin) - (oldBox.xMax - oldBox.xMin);ystr = (newBox.yMax - newBox.yMin) - (oldBox.yMax - oldBox.yMin);}else if ( slot->format == FT_GLYPH_FORMAT_BITMAP ){xstr = FT_PIX_FLOOR( xstr );if ( xstr == 0 )xstr = 1 << 6;ystr = FT_PIX_FLOOR( ystr );error = FT_Bitmap_Embolden( library, &slot->bitmap, xstr, ystr );if ( error )return;}if ( slot->advance.x )slot->advance.x += xstr;if ( slot->advance.y )slot->advance.y += ystr;slot->metrics.width += xstr;slot->metrics.height += ystr;slot->metrics.horiBearingY += ystr;slot->metrics.horiAdvance += xstr;slot->metrics.vertBearingX -= xstr / 2;slot->metrics.vertBearingY += ystr;slot->metrics.vertAdvance += ystr;if ( slot->format == FT_GLYPH_FORMAT_BITMAP )slot->bitmap_top += ystr >> 6;}2.斜体斜体在FreeType中可以通过矩阵变换来实现,只要把矩阵设置成⼀个切边矩阵就可以了,⽅法如下:// 倾斜度,越⼤就越斜float lean = 0.5f;FT_Matrix matrix;matrix.xx = 0x10000L;matrix.xy = lean * 0x10000L;matrix.yx = 0;matrix.yy = 0x10000L;FT_Set_Transform( face, &matrix, 0 );3.描边⽹上有不少⽂章说描边其实很简单,就是上下左右各移动⼀个像素渲染⼀次,最后在中间再渲染⼀次就可以了。
嵌入式中文字库研发获突破
![嵌入式中文字库研发获突破](https://img.taocdn.com/s3/m/6a4beb5a26284b73f242336c1eb91a37f11132d8.png)
嵌入式中文字库研发获突破
佚名
【期刊名称】《《军民两用技术与产品》》
【年(卷),期】2005(000)004
【摘要】上海汉峰信息科技有限公司研制成功一种拥有自主知识产权的MiniType 新型字形技术,通过了国家信息处理产品标准符合性检测中心检测,进入应用阶段。
【总页数】1页(P14)
【正文语种】中文
【中图分类】TP317
【相关文献】
1.中联重科智能化技术新突破成功研发嵌入式3D显示系统 [J],
2.在嵌入式操作系统中嵌入中文字库方法的探讨 [J], 陈小朴;曾育星;沈烈
3.计算机字库中文字体设计规范的坚守与突破——以方正基础像素体为例 [J], 李克; 杨新忠
4.国产腹腔机器人产品研发获突破 [J],
5.中国石油牵头的国家重点研发计划打破国外垄断“高性能合成橡胶产业化关键技术”获突破 [J],
因版权原因,仅展示原文概要,查看原文内容请购买。
一种内嵌式矢量汉字支撑系统—PD环境下的CVHZ5汉字系统的实现
![一种内嵌式矢量汉字支撑系统—PD环境下的CVHZ5汉字系统的实现](https://img.taocdn.com/s3/m/505362356d175f0e7cd184254b35eefdc9d31552.png)
一种内嵌式矢量汉字支撑系统—PD环境下的CVHZ5汉字系
统的实现
石锐;郭钢
【期刊名称】《计算机应用与软件》
【年(卷),期】1995(012)004
【摘要】本文针对功能很强的PD软件(即MICROCADDS)中汉字标注
极不方便的缺陷,用其内嵌的用户编程语言UPL开发一套有汉语拼音和常用图形,符号输入功能的内嵌式矢量汉字系统,为PD软件在我国的推广应用提供了良好的汉字支持。
【总页数】4页(P44-47)
【作者】石锐;郭钢
【作者单位】不详;不详
【正文语种】中文
【中图分类】TP316
【相关文献】
1.基于PXA255的PDA交通管理系统在Linux环境下的实现 [J], 姚存治;张桂香
2.基于PXA255的PDA交通管理系统在Linux环境下的实现 [J], 宁志刚;汪仁煌
3.校园网环境下《VB程序设计》学习支撑系统的设计与实现 [J], 谢忠红;朱淑鑫;
夏欣;徐焕良
4.基于 PDA 环境下的测绘成图系统的设计与实现 [J], 李东海;麻维
5.一种互联网环境下的医学图像自适应传输系统实现 [J], 罗哲明; 杨媛媛
因版权原因,仅展示原文概要,查看原文内容请购买。
基于OpenType的国际音标字库研究与实现
![基于OpenType的国际音标字库研究与实现](https://img.taocdn.com/s3/m/399c7ec380eb6294dd886c9b.png)
字体不 美 观甚至 音标 误解 的情况 。 问题 分析 。我们 把所Байду номын сангаас 字符 分为 : 组合字 符 、 上
加 字符 、 下加 字 符 和基 础 字 符 。组 合 字符 由两 个或 多个字 符 组成 的字符 整体 ; 上加字 符 , 顾名思 义是基
础 字符 上 面附加 的字符 ; 下 加字符 , 是基 础字 符下面
等, 较 窄 的字 符 如 m,国 等 , 较宽 字符如 【 ml ,
等 。除此 之 外 , 还有附加符号 如 【 铘,圈 ,f 1 , 嘲 等 。 国际 音标 表规定 一个 音标 符号 和 附加 符的 组合
当作 一个 字符 , 附加 符号 附加 在 字母 的上 、 下或中。
国际 音 标 符号 作 为 描 写人 类 语 音 的文 字 符 号 ,
等 影响字 体美 观 的 问题 。而 Tr u e Ty p e 字 库 技 术 只 能解 决部 分 同宽 或 同 高 字 符 , 无法顾及 全部字 符。
[ 收稿 日期]2 0 1 3 — 0 3 — 1 2
是 T r u e T y p e 格 式 的字 库 , 所 以无 法 避 免 的 会 出 现
加符( Di a c r i t i c s ) , 也 叫附加 区别 符 , 是 小形 的字母 形
状 的符 号 或是其 他 标 记 , 可 以多 种 方式 附加 在 元 音
或 是辅 音符 号上 , 使元 音或 辅 音的 意义 发生 变化 , 表 示 更精 确 的语 音 。 国际音标 在使 用过 程 中经 常会 遇 到 附加 符 ( D i — a e r i t i c s ) 出现 位 置 偏 差 , 附 加 符 与 元 音 或 辅 音 叠 加
基于Freeman链码的汉字图像轮廓曲线拐角点检测方法
![基于Freeman链码的汉字图像轮廓曲线拐角点检测方法](https://img.taocdn.com/s3/m/0011062af02d2af90242a8956bec0975f565a445.png)
基于Freeman链码的汉字图像轮廓曲线拐角点检测方法汪剑;皮佑国;刘明友
【期刊名称】《自动化技术与应用》
【年(卷),期】2009(028)001
【摘要】拐角点检测在模式识别和机器视觉中有重要作用.本文应用基于Freeman 链码的一种检测和确定图像轮廓曲线拐角点位置的方法,提取出汉字轮廓图像的拐角点作为特征点用于图像配准中.首先提取出汉字图像的轮廓曲线,然后利用Freeman链码给轮廓曲线编码,根据判断准则,提取出必是拐角点的点与可疑拐角点,最后估算可疑拐角点的曲率,挑出每组临近可能拐角点中曲率最大的点为真实拐角点.实验结果表明本文应用的方法能准确地检测出同被测对象相一致的拐角点,给出了实验数据与过程.
【总页数】5页(P88-92)
【作者】汪剑;皮佑国;刘明友
【作者单位】华南理工大学,自动化科学与工程学院,广东,广州,510640;华南理工大学,自动化科学与工程学院,广东,广州,510640;华南理工大学,自动化科学与工程学院,广东,广州,510640
【正文语种】中文
【中图分类】TP391.12
【相关文献】
1.二值图像中基于陡变度的拐角点集检测方法 [J], 刘建忠;刘鎏;张云东;经坤
2.基于SIFT特征点匹配的印刷品图像检测方法 [J], 张洁玉;朱近;夏德深
3.一种基于关键点的红外图像人体摔倒检测方法 [J], 徐世文;王姮;张华;庞杰
4.基于arm-linux机器视觉的图像特征点快速检测方法 [J], 李保华
5.一种基于点匹配的图像重复区域检测方法 [J], 甘玲;张鹏飞
因版权原因,仅展示原文概要,查看原文内容请购买。
嵌入式平台下的QPF字库生成教学研究
![嵌入式平台下的QPF字库生成教学研究](https://img.taocdn.com/s3/m/c7041e1c844769eae009eded.png)
e x p o r t TMAKE P AT H= ¥ T MAKE DI R/ l i b , l i n u x — g + +
彦
e x p o r t Q T D I R = ¥ Q T 2 D I R
e x p o r t P A T H = ¥ Q T D I R / b i n: ¥ P A T H
二、实验前 的准 备——搭建 Qt 运行环境 在 进行 实验之前 ,首先要搭建 Q l 运行环境 ,在 T r o l h e c h
公司 的网站 上下载 Q t / E m b e d d e d的免 费版本 ,用如下代 码将 实验需要用到的三个 文件 拷贝到 / r o o t / 2 4 1 0 s Q t 目录下 。
这一步建立 了从 Q t / E m b e d d e d 2 . 3 . 1 0到 Q t 2 . 3 . 2的静态库
、
实验软硬件平台简介
的链 接。其中 q v f b工具 用来生成 V i r t u a l f r a me b u f f e r ,这是一
果在 V i r t u a l f r a m e b u f e r中运行没有 问题 ,可以直接通过交叉
课 程
教 法
Z HL . I A N Y E  ̄ , t A OX UE专业教学
嵌入式平台下的QP F 字库生成教学研究
◆内蒙古工程学校计算机教研 室 李
嵌 入式 产品现在 随处可 见 ,随着 嵌入式 产品 的国际化 , 如智能手机 、平板 电脑等 ,在 这些产品 中都实现 了多国语言 的通用 ,而我 国少数 民族 的文字显示没有作 为一项 正式语言 加载至这些产 品中。因此 ,研 究这些语言文字在嵌 入式产品 中的应用是 一项 非常有意义的工作 ,全 国各 大高校基本没有 这样 的课程 。本 文针对这项任务首先 阐述 了嵌入式产品环境
由“字体嵌入”所想到的
![由“字体嵌入”所想到的](https://img.taocdn.com/s3/m/62a5e010ba68a98271fe910ef12d2af90242a825.png)
由“字体嵌入”所想到的
杨鑫芳
【期刊名称】《网络运维与管理》
【年(卷),期】2013(000)011
【摘要】PPT的应用在日常工作中非常普遍,特别是在教学的环境中应用更是广泛,文中介绍了两个PPT应用过程中的问题和解决办法,希望对您的工作有所帮助!
【总页数】2页(P69-70)
【作者】杨鑫芳
【作者单位】山东
【正文语种】中文
【中图分类】TP317.4
【相关文献】
1.基于FreeType嵌入式矢量字体引擎的研究 [J], 王凤
2.嵌入字体不让字体玩变脸 [J], Aa酱
3.嵌入式Linux系统Qt/Embedded中文字体移植 [J], 罗志灶;周赢武
4.嵌入式矢量字体变色处理技术分析 [J], 张鹏
5.Flash中嵌入字体和设备字体的概念 [J], whispering
因版权原因,仅展示原文概要,查看原文内容请购买。
TurboC矢量字库的分析和使用
![TurboC矢量字库的分析和使用](https://img.taocdn.com/s3/m/b57c8c20e97101f69e3143323968011ca300f731.png)
TurboC矢量字库的分析和使用
黄健青;王平
【期刊名称】《海南大学学报:自然科学版》
【年(卷),期】1995(013)002
【摘要】继点阵字库之后出现的矢量字为,以其数据量小,显示速度快,易于放大、缩小,变形后字体不失真等优点,逐渐流行起来,本文以TurboC中西文矢量字为例,分析了矢量字库的一般结构,为分析和使用矢量字库提供了基本思想和途径。
【总页数】7页(P148-154)
【作者】黄健青;王平
【作者单位】不详;不详
【正文语种】中文
【中图分类】TP312C
【相关文献】
1.在嵌入式浏览器中使用TrueType矢量字库 [J], 孙晓辉;陈晓;王春;刘建
2.在嵌入式浏览器中使用TrueType矢量字库 [J], 孙晓辉;陈晓;王春;刘建
3.TurboC使用中常见的输入问题 [J], 王海林
4.TurboC使用中常见的输入问题 [J], 王海林
5.在UCDOS5.0内含WPS下使用扩充矢量字库 [J], 廖军
因版权原因,仅展示原文概要,查看原文内容请购买。
一种在AutoCAD中调用矢量汉字的新方法
![一种在AutoCAD中调用矢量汉字的新方法](https://img.taocdn.com/s3/m/53e6b7a570fe910ef12d2af90242a8956becaae7.png)
一种在AutoCAD中调用矢量汉字的新方法
钟辉
【期刊名称】《沈阳建筑工程学院学报》
【年(卷),期】1996(012)003
【摘要】介绍一种由AutoCAD的开发系统ADS调用矢量汉字库的方法,同时对当前流行的矢量汉字库的结构作了分析。
【总页数】7页(P305-311)
【作者】钟辉
【作者单位】沈阳建筑工程学院计算机系
【正文语种】中文
【中图分类】TP311.52
【相关文献】
1.一种在Visual BASIC for windows 下直接调用Autocad图形的方法 [J], 刘崇欣
2.Word中调用与处理AutoCAD图形的方法 [J], 韩玉芹;朱育林
3.一种在中调用存储过程的新方法 [J], 房志峰
4.BASIC3.2版对外部命令文件直接调用的一种新方法 [J], 何榕生
5.利用系统调用序列检测入侵的一种新方法 [J], 潘峰;欧阳明光;汪为农
因版权原因,仅展示原文概要,查看原文内容请购买。
基于程序框架Qt的嵌入式系统汉字库设计与实现
![基于程序框架Qt的嵌入式系统汉字库设计与实现](https://img.taocdn.com/s3/m/4b57d4a5c67da26925c52cc58bd63186bceb92fa.png)
基于程序框架Qt的嵌入式系统汉字库设计与实现
殷知磊;张钟澍;肖跃先;薛松
【期刊名称】《成都信息工程学院学报》
【年(卷),期】2010(025)001
【摘要】在研究现有手持终端设备中文输入法及汉字库的基础上,提出了一种可以适合一般程序框架Qt的中文全拼输入法汉字库生成方法.使用该方法生成的汉字库结构合理,可以支持所有嵌入式Qt环境中的可显示汉字.经分析和实践验证,全拼输入法汉字库设计以及汉字库的生成方法非常适合ARM-Linux系统的全拼中文输入法使用.
【总页数】6页(P35-40)
【作者】殷知磊;张钟澍;肖跃先;薛松
【作者单位】成都信息工程学院计算机学院,四川,成都,610225;成都信息工程学院计算机学院,四川,成都,610225;成都信息工程学院计算机学院,四川,成都,610225;成都信息工程学院计算机学院,四川,成都,610225
【正文语种】中文
【中图分类】TP391
【相关文献】
1.基于Qt的多线程嵌入式系统设计与实现 [J], 向明尚;张志华;潘丽艳;
2.基于ZigBee与MQTT的物联网网关通信框架的设计与实现 [J], 谭方勇;王昂;刘子宁;
3.基于MVC的Qt应用程序框架的设计与实现 [J], 王玉亭;孙剑
4.基于Qt的多线程嵌入式系统设计与实现 [J], 向明尚;张志华;潘丽艳
5.基于Qt的多线程嵌入式系统设计与实现 [J], 向明尚;张志华;潘丽艳
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第23卷第4期宁波大学学报(理工版) V ol.23No.4 2010年10月JOURNAL OF NINGBO UNIVERSITY ( NSEE ) Oct. 2010文章编号:1001-5132(2010)04-0056-06基于FreeType嵌入式矢量字体引擎的研究黄秀珍, 何加铭*, 邰晓英(宁波大学信息科学与工程学院, 浙江宁波 315211)摘要: 提出了一种嵌入式矢量字体引擎的开发和实现方法. 首先剖析了FreeType开源引擎的体系结构和渲染流程, 然后针对TrueType矢量字体对其裁剪, 包括去掉不相关字体解释器及宏、对轮廓分解算法优化等, 最终在大小和速度上进行优化, 开发出新的字体引擎. 该引擎能很好地适用于存储空间小、运算能力不高的嵌入式系统, 并在MTK平台下测试通过.关键词: FreeType; TrueType矢量字体; 嵌入式平台中图分类号: TP317 文献标识码: A随着嵌入式系统的发展和应用, 在嵌入式系统中使用高质量的汉字字库已成为关注的热点. 尤其是在与人们生活关系日益密切的移动通信设备中, 高效地显示出美观大方的汉字已成为当前主要的市场需求. 目前, 嵌入式系统的字库还是以点阵字为主. 由于点阵字库不能缩放, 因此对于高分辨率屏幕而言, 显示数据量大, 其显示速度比普通的TrueType矢量字库慢[1]. 而在嵌入式系统中使用矢量字体可以实现较好的显示效果, 并且矢量字体可以对字体风格、字体大小、字体的颜色等进行动态渲染. 与传统使用的点阵字库相比, TrueType字库可以高质量地实现字符的无级放大或缩小, 并实现字符的旋转、倾斜等操作, 方便地实现“所见即所得”.在嵌入式系统中使用矢量字体需要相应的字体引擎. 在PC机上, 通常可以使用FreeType字体引擎来渲染TrueType矢量字库. FreeType库是一个开源字体引擎[2], 它支持单色位图、反走样位图的渲染, 并且提供统一的接口来访问多种字体格式文件, 包括TrueType、OpenType、Type1、CID、CFF、Windows FON/FNT、X11 PCF等. 少数嵌入式系统可以直接支持FreeType字体引擎[3]. 而对大多数嵌入式系统来说, 由于存储空间和运算能力的限制, 并不能直接使用FreeType字体引擎, 并且在移植时需要对其裁剪优化[4].1FreeType字体引擎和TrueType矢量字体1.1TrueType矢量字体TrueType字体格式是由美国Apple公司和Microsoft公司联合提出的一种新型数字化矢量字体格式, 它采用几何学中的二次B样条曲线及直线来描述字体的外形轮廓. 二次B样条曲线具有一阶连续性和正切连续性. 抛物线可由二次B样条曲线来精确表示, 而更为复杂的字体外形可用B收稿日期:2010-03-24. 宁波大学学报(理工版)网址: 基金项目:科技部创新基金(60472099); 浙江省科技计划项目(2009C31107).第一作者:黄秀珍(1983-), 女, 江西永修人, 在读硕士研究生, 主要研究方向: 网络与终端软件技术. E-mail: hxzjxsd1983@ *通讯作者:何加铭(1949-), 男, 浙江杭州人, 博导/教授, 主要研究方向: 网络与终端软件技术. E-mail: hejiaming@第4期黄秀珍, 等: 基于FreeType嵌入式矢量字体引擎的研究 57样长曲线的数学特性以数条相接的二次B样条曲线及直线来表示.描述TrueType字体的文件(内含TrueType字体描述信息、指令集、各种标记表格等)可以通用于MAC和PC平台. 在Mac平台上, 它以“Sfnt”资源的形式存放, 而在Windows平台上以TTF文件出现. 为保证TrueType的跨平台兼容性, 字体文件的数据格式采用Motorola式数据结构(高位在前, 低位在后)存放. 所有Intel平台的TrueType解释器在执行之前, 只要进行适当的预处理即可. Windows的TrueType解释器已包含在其GDI(图形设备接口)中, 所以任何Windows支持的输出设备都能用TrueType字体输出.1.2FreeType字体引擎FreeType库使用ANSI C开发的开源字体引擎, 因此, FreeType的用户可以灵活地对它进行裁剪, 并且, 它可以被用在诸如图像库、展出服务器、字体转换工具、图像文字产生工具等多种产品上. 移动通信平台中引入FreeType字体引擎有以下优势: (1)占用的存储容量小, FreeType库文件通过裁剪定制可减少存储大小和运行时间; (2)渲染字体清晰美观, 字体大小和风格可变.为了使FreeType字体引擎定制到嵌入式系统, 需要对其进行裁剪. 在32位嵌入式系统下, 存储容量的大小是嵌入式系统处理矢量字库的一个瓶颈, 这就需要我们深入研究其体系结构及渲染流程, 以做进一步的裁剪优化.2FreeType体系结构和渲染流程在使用FreeType字体引擎显示字符时, 需要调用其模块化函数, 其中的每个函数都是封装一个功能模块的组件.其具体步骤如下: 首先建立初始化类库, 装载Face信息, 然后设置字体大小, 并设置轮廓信息, 最后将轮廓渲染为位图信息. 其具体流程图如图1所示.对应流程图的步骤说明如下:(1) 首先对FreeType库进行初始化, 并且读取矢量字库文件.FT_Init_FreeType(&library);FT_New_Face(library,filename,0,&face);这里的library是个全局变量, 而filename是矢量字库的路径, 通过以上2个步骤首先建立了1个FreeType库的实例. 通过FT_New_Face加载1个TrueType矢量字库, 得到字体的face对象接口.(2) 设置当前像素尺寸.使用函数FT_Set_Pixel_Size(face,0,size)来完成设置当前像素尺寸, 也可以使用函数FT_Set_ Char_Size(), 但要注意后面的函数设置的大小不是以像素为单位的.(3) 设置字符的轮廓信息.由于在TrueType文件格式中, 每个字符的轮廓信息是根据字形索引来存放的, 所以首先需要根据字符的编码来得到字形索引, 代码如下: FT_Get_Char_Index(face,charcode);从face中来得到字符对应的字形后, 需要读取到字形槽中才能使用.FT_Load_Glyph(face,glyph_index,FT_LOAD_ DEFAULT);Get_Glyph(face->glyph,&glyph);最后提取字形槽中的字形图, 即点阵信息.FT_Glyph_To_Bitmap(&glyph,FT_RENDER_MODE_NORMAL,0,1);图1 FreeType字符显示流程58 宁波大学学报(理工版) 2010bitmap_glyph = (FT_BitmapGlyph)glyph;经过上述过程转化之后, 字符的位图信息就存放在bitmap_glyph的参数里面, 嵌入式系统GDI就可以把这个字符显示出来.(4) 改变字体风格.粗体的显示直接调用FT_GlyphSlot_Embolden (face->glyph). 由于FreeType中没有直接对斜体的支持, 所以需要自己对矢量的字形轮廓进行变换, 定义变换矩阵后进行如下变换:error = FT_Set_Transform(face, /* 目标face对象 */&matrix, /* 指向2×2矩阵的指针 */&delta ); /* 指向2维矢量的指针 */此函数将对指定的face对象设置变换. 它的第2个参数是1个指向FT_Matrix结构的指针. 该结构描述了1个2×2仿射矩阵. 第3个参数是1个指向FT_Vector结构的指针, 该结构描述了1个简单的二维矢量, 该矢量用来在2×2变换后对字形图像平移.3裁剪与优化由于FreeType库中的API都是封装好的组件, 其中的具体实现细节只在源码中才能查看到. 通过对源码的分析, 笔者去除了一些无关的定义及步骤, 裁剪和改进了一些算法.首先, 在对FreeType库进行初始化时, 去除FT_Library和FT_Face等复杂的类对象. 由于FreeType中采用了面对对象的思想编程, 因此其包含了TrueType、Type1、CID、CFF、Windows FON/ FNT、X11 PCF等多个字体驱动的抽象接口, 并使用抽象的类来统一所有字体驱动初始化过程. 而这里我们只需用到格式TrueType矢量字体, 不需要对字体驱动进行判断, 可直接使用TrueType字体driver.在对TrueType字体进行初始化时, 首先要载入其各个表项. 将Library对象、face对象的创建和初始化以及对字体平台驱动的判断都简化为TrueType中各个重要表项的载入, 以对应初始化字体的相关参数.设置字体大小部分比较简单. 主要是根据指定的字体大小, 确定缩放的规模及缩放后字体的规格参数: 如额定的宽度和高度、EM正方形的像素宽度和高度等. 而此部分也不用face对象等结构体.取得字符轮廓是字符渲染的关键步骤. 在FreeType中有多种字体, 也有多种字符轮廓, 这里我们只用TrueType字符轮廓的载入方法. 首先用函数FT_Get_Char_Index取得字符索引, 查找方法为有线性查找和二分查找. 对有序数据使用二分法查找字符索引, 然后根据字符索引和local表中偏移量得到glyf表中的图元信息. 载入图元信息时, 首先载入图元头, 然后载入简单图元, 最后再处理图元信息.最后轮换的图元数据为点阵信息时, 可选择使用smooth渲染器. 它能生成256色位图信息, 字体边缘并且有渐变的效果. 在进行渲染时, 先将作平移操作, 以调整到相对目标窗口的位置. 然后计算出Control Box的值, 最后将轮廓分解、光栅化填充.3.1读取字库去除不相关的字体driver初始化, 直接使用TrueType字体driver初始化. 首先是打开字库文件, 读取初始化信息. 由于TrueType矢量字体是以多个表的形式来包含组成字体轮廓的数据, 因此字体引擎需要各表的信息来渲染其字体. 接着读取表目录. 每个表都有1个tableentry结构项, 而tableentry结构包含了资源标记、校验和、偏移量和每个表的大小. 由于TrueType字体中的每个表都保存了不同的逻辑信息, 如图元中数据、字符到图元的映射、字距调整信息等等. 因此, 有些表是必须的, 而有些是可选的. 然后依次读取常用表的第4期 黄秀珍, 等: 基于FreeType 嵌入式矢量字体引擎的研究 59信息, 包括: head, maxp, cmap, hhea, vhea, hmtx, vmtx, loca 等. 3.2 设置字体大小主要是对函数FT_Set_Pixel_Sizes 的实现部分做了优化. 原函数实现部分主要在FT_Request_ Size 的几个函数, 主要是按照设置的字体高度和宽度取得字体缩放的各个参数, 用到数学中的除法函数FT_DivFix 、FT_MulFix 及取整函数FT_PIX_ CEIL 等.3.3 取得字符轮廓信息首先取得字符的字形索引, 函数FT_Get_ Char_Index()中主要使用的是二分法查找cmap 表中字形索引, 而不使用线性查找法.然后根据字形索引和偏移查找字符对应的图元信息. 图元数据(glyf 表)是TrueType 字体的核心信息, 通常它是最大的表. 因为, 位置索引是张单独的表, 而图元数据表则完全只是图元的序列而已; 每个图元以图元头结构开始, 简单图元中保存了当前图元的轮廓线的数目, 合成图元的轮廓线总数必须基于组成该合成图元的所有图元的数据计算得到. 对于简单图元而言, 图元的描述紧跟在图元头结构之后. 图元的描述由几部分信息组成: 所有轮廓线结束点的索引、图元指令和一系列的控制点. 每个控制点包括1个以x 和y 坐标的标志. 概念上来讲, 控制所需的信息和GDI 函数PolyDraw 函数所需的信息相同, 都是1组标志和1组点的坐标. 图元可以包含1条或多条轮廓线. 比如, 汉字“宋”有3条轮廓线和若干控制点, 图2为其控制点的显示.图2 宋体的“宋”字的控制点信息TrueType 字体中的图元轮廓是用二阶Bezier曲线定义的, 具体有3个点: 1个曲线上的点, 1个曲线外的点和另1个曲线上的点. 多个连续的不在曲线上的点是允许的. 3.4 轮换图元数据为点阵信息在3.3小节中, 主要是从字库中提取图元信息, 而本节则根据图元信息进行作图和填充. 作图是根据关键点画直线和贝塞尔曲线, 然后是光栅填充, 此时, 以将填充后的字模提取并缩小保存(字模一般是2048×2048).FreeType 缺省带了2个渲染器: raster 支持从向量轮廓(由FT_Outline 对象描述)到单色位图的转换; smooth 支持同样的轮廓转换到高质量反走样的象素图, 其使用256级灰度. smooth 渲染器也支持直接生成span. 在此, 由于我们需要得到是高质量反走样的位图, 所以使用的是smooth 渲染器.首先, 进行轮廓曲线分解. 1个轮廓是2D 平面上一系列封闭的轮廓线, 每个轮廓线由一系列线段和Bezier 弧组成. 应用如下规则于将轮廓点分解成线段和弧.2个相邻的“on ”点表示1条线段; 1个conic off 点在2个on 点之间表示1个conic Bezier 弧, off 点是控制点, on 点是起点和终点; 2个相邻的cubic off 点在2个on 点之间表示1个cubic Bezier 弧, 它必须有2个cubic 控制点和2个on 点. 最后, 强制在2个相邻的conic off 点的正中间创建1个虚拟的on 点.装入或变换过的轮廓必须在渲染成目标位图之前作平移操作, 以调整到相对目标窗口的位置.4 实验与讨论首先, 在MTK 模拟器上测试. 运行环境如下: PC 机CPU 2.17GHz, 内存1GB, 相应软件平台为VC 6.0. 图3中MTK 平台为已有的点阵字体显示. 而在模拟器上, 字体显示效果如图4和图5所示.图4和图5中显示的字体为TrueType 矢量字60 宁波大学学报(理工版) 2010体黑体和行楷, 使用的字体引擎为制作的新引擎. 在已有点阵字体显示时, 如换种字体就要在平台中加入相应的点阵资源再烧机, 然而使用矢量字体后, 只需在手机中加入1种字体文件即可, 不需要修改操作系统. 矢量字体引擎显示的字体为256色灰度级, 具有边缘渐变效果, 字体风格也可以进行动态设置.笔者测试了150个汉字, 并分别在FreeType 引擎和新引擎上测试其平均显示时间, 测试数据见表1.表1 FreeType 引擎和新引擎测试汉字平均显示时间比较测试方法 FreeType 引擎平均显示时间/ms新引擎平均显示时间/ms利用MTK 显示150个汉字32.075 15.675由表1数据可见, 在VC 编译器下, 新引擎运行时间只占原引擎时间的50%左右, 新引擎在运行时间上有明显的优势.同时, 笔者也在MTK 平台手机真机上进行实验. MTK25平台手机内核小. MTK25平台默认的是128Mbit flash memory 和32Mbit SRAM, 因为1Byte 等于8bit, 所以也就是我们通常所说的是16M ROM 和4M RAM, 其中, 文件系统占用2M. 未裁剪优化的FreeType 字体在引擎移植入后, 会因为存储运算空间不足而死机黑屏. 而经过我们对FreeType 的裁剪和优化之后, 新引擎能顺利在MTK 平台中运行. 运行时的参数如下:字体引擎: 代码大小11K; 加载后占用手机ROM 大小: 39K; 运行时占用手机RAM 大小: 139K. 由于新引擎存储和运算时占用空间小, 加载后, 速度几乎没有变慢, 因此没有出现字符显示延迟现象.5 结语提出了一种嵌入式矢量字体引擎的开发和实现方法. 该方法首先剖析了FreeType 开源引擎的体系结构和渲染流程, 然后针对TrueType 矢量字体对其裁剪, 包括去掉不相关字体解释器及宏、对轮廓分解算法优化等, 最终在大小和速度上进行优化, 开发出新的字体引擎. 在MTK 平台下测试结果表明, 采用本算法得到字体引擎与FreeType 字体引擎的显示的字体都具有256色灰度级, 具有边缘渐变效果, 可以动态设置字体风格, 但新引擎显示速度明显加快、存储空间明显减少. 新引擎能很好的适用于存储空间小、运算能力不高的嵌入式系统. 由于新引擎使用的是ANSI C 编写, 适合移植到各类有文字显示要求的嵌入系统中,如手机、图3 MTK 平台点阵字体显示图4 MTK 平台中矢量字体黑体显示图5 MTK 平台中矢量字体行楷显示第4期黄秀珍, 等: 基于FreeType嵌入式矢量字体引擎的研究 61PDA等. 下一步就可以把此引擎移植于他嵌入式系统中. 移植时, 只需要连接字体引擎和嵌入式系统GDI即可, 且此项工作与各个嵌入式系统相关.参考文献:[1]Microsoft typograph. What is TrueType[EB/OL]. (1997-06-30) [2009-01-13]. /typogra- phy/WhatIsTrueType.mspx.[2]Werner Lemberg. The freetype project: A free,high-quality and portable font engine[EB/OL]. (2009-01-14) [2009-1-14]. .[3]孙晓辉, 陈晓, 王春, 等. 在嵌入式浏览器中使用TrueType矢量字库[J]. 电视技术, 2007, 31(8):120-122. [4]Wang Yuanyuan, Gao Mingyu, Zeng Yu. Chinese displaytechnology on embedded platform using simple direct- media layer (SDL)[C]//Shanghai, 21ETT and GRS, 2008: 3563-3566.[5]万明磊, 刘卫忠, 李泉, 等. 矢量字体在顶盒上的实现与应用[J]. 数字电视, 2004(16):46-48.Design and Implementation of Vector Font EngineBased on FreeType in Embedded SystemHUANG Xiu-zhen, HE Jia-ming*, TAI Xiao-ying( Faculty of Information Science and Technology, Ningbo University, Ningbo 315211, China )Abstract: A method to develop and implement the font engine in the embedded system is introduced. First, we analyze the system architecture and rending process of open source font engine of FreeType. Then we tailor and optimize it for TrueType vector font by removing irrelevant font interpreter and macro, as well as optimizing the glyph decomposition algorithm. Finally we develop a new font engine which is optimized in size and display speed. The new engine features in lower storage space and higher arithmetic speed for the embedded system. The test on MTK platform proves its efficiency and practicality.Key words: FreeType; TrueType vector font; embedded platformCLC number: TP317 Document code: A(责任编辑 章践立)。