Windows矢量字体点阵数据提取的实现方法
从矢量字库中获取近似汉字点阵

当 汉 字 输 出 到 Pc rB x控 件 后 . 于 它 还 是 一 it e o u 由
个 矢 量 汉 字 . 何 把 该 汉 字 的 点 阵 数 据 按 找 单 片 机 系 如
网:
统 L D显 示 屏 点 阵 格 式 读 取 出 来 呢 ? 比较 下 面 两 个 C
r F中字体 的汉字转换为点阵汉字 .从而在使 L D电 r C
■ ■
图 1 图 2
在 网 1中 . 择 最 佳 的 的 字 体 尺 寸 . 红 色 作 为 选 以
前 景 色 , 色 为 背 景 色 , Peue o 控 件 输 出 汉 字 . 黑 在 itrB x
的 高 度 和 宽 度
并 且 使 Pc rB x控 件 的 高 度 和 宽 度 等 于 输 出 汉 字 it e o u
和 窗 体 F r 一 样 可 以 在 控 件 内绘 制 图 形 和 输 出文 字 om
的 控 件 , 可 以 按 照 设 置 的字 体 、 型 和 字 号 . 它 字 以及 前
票 交 易 所 的 信 息 显 示 . 显 示 的 汉 字 . 般 来 自 点 阵 其 一 字 库 , P 时 代 点 阵 字 库 也 只 有 寥 寥 几 个 :2 1 而 C 1x 2和 1 x 6的宋 体 .4 2 宋 或 者 宋 体 因此 一 般 L D 显 61 2 x 4仿 C 示 屏 上 的 汉 字 字 体 比较 单 调 而 点 阵 字 库 可 以 在 U — C
汉字 , 换 为点 阵汉 字的 的方 法 , L 转 使 CD 显 示 屏 显 示 的 汉 字 的 字 体 不 局 限 于 现 有 的 点
阵字库 。
关 键 词 :矢 量 字 体 ;汉 字 点 阵 :L CD
矢量字体

矢量字体矢量字体是与点阵字体相对应的一种字体。
矢量字体的每个字形都是通过数学方程来描述的,一个字形上分割出若干个关键点,相邻关键点之间由一条光滑曲线连接,这条曲线可以由有限个参数来唯一确定。
矢量字的好处是字体可以无级缩放而不会产生变形。
目前主流的矢量字体格式有3种:Type1,TrueType和OpenType,这三种格式都是平台无关的。
Type1全称PostScript? Type1,是1985年由Adobe公司提出的一套矢量字体标准,由于这个标准是基于PostScript Description Language(PDL),而PDL又是高端打印机首选的打印描述语言,所以Type1迅速流行起来。
但是Type1是非开放字体,Adobe对使用Type1的公司征收高额的使用费。
TrueType是1991年由Apple公司与Microsoft公司联合提出另一套矢量字标准。
Typ1使用三次贝塞尔曲线来描述字形,TrueType则使用二次贝塞尔曲线来描述字形。
所以Type1的字体比TrueType字体更加精确美观。
一个误解是,Type1字体比TrueType字体占用空间多。
这是因为同样描述一个圆形,二次贝塞尔曲线只需要8个关键点和7段二次曲线;而三次贝塞尔曲线则需要12个关键点和11段三次曲线。
然而实际情况是一般来说Type1比TrueType要小10%左右。
这是因为对于稍微复杂的字形,为了保持平滑,TrueType 必须使用更多的关键点。
由于现代大部分打印机都是使用PDL作为打印描述语言,所以True1字体打印的时候不会产生形变,速度快;而TrueType则需要翻译成PDL,由于曲线方程的变化,还会产生一定的形变,不如Type1美观。
这么说来,Type1应该比TrueType更具有优势,为什么如今的计算机上TrueType反而比Type1使用更广泛呢?这是因为第一:Type1由于字体方程的复杂,所以在屏幕上渲染的时候,花费的时间多,解决方案是大部分Type1字体嵌入了点阵字体,这样渲染快,但是边缘不光滑,比较难看。
GUI原理4 - 矢量字体

说起矢量字体,不得不说一下多边形填充原理。
本来是想将多边形填充作为单独的一节内容,可惜说得太细我累大家也累。
多边形填充最需要关注的就是斜率,计算每条边的斜率,从而得到每条边在每一行上的切点。
然后从左到右,将各切点连接起来,逐行进行。
多边形有两种填充方式,Alternate和Winding。
矢量字体主要用的前一种方式,而winding会将所有的切点都连接起来,没有了中间的分隔区域。
比如,在Alternate模式下,从最左边的切点1,会连接切点2,然后从切点3连接到切点4,而2到3是不连接的。
这样就形成了一个空洞,也是矢量字的奥秘所在。
Winding模式会将所有的切点都连接起来,即从最左边的一直画到最右边。
FillMode多边形组——PolyPolygon将多个多边形组合成一个组,从而形成复杂的多边形组。
同样,这个组也依赖于FillMode的填充模式。
下面我们来看一下中文的“口”是如何写出来的。
“口”由两条多边形组合而成,根据FillMode为Alternate,相重叠的部分不显示。
用笔在字的中央画一条横线,就可以找到4个交点,而交点2到3是不连接的,这样就形成了“口”中间的洞。
微软Arial字体中“S”的曲线微软的Arial字体中存储的“S”,就是多个Bezier3点组成的。
点41是锚点,而40和42是控制点,来控制通过41的曲线的张力。
在点的定义上,有on curve和not on curve两种,通常将在曲线上的点定为锚点,而不在曲线上的点为控制点。
这是我年初的时候,为了研究矢量字体,将字母P用微软的方式输出后,再读取字库点阵数据,使用红叉画出字库中所有的点。
P是由两条Bezier曲线包围而成的,第二条起着切割的目的,已形成P中间的圆洞。
看看字母“B”的填充。
字体是如何保证对齐的呢?原来在字库内部,有一个基准线,就好像信纸的虚线,用来水平方向对齐的,同样,也有个垂直方向的基准线。
每个字都有上浮和下沉的高度,这也是该字的最上和最下的点所处的位置。
测绘技术中的矢量数据提取与处理技巧

测绘技术中的矢量数据提取与处理技巧随着科技的进步和社会的发展,测绘技术在各个领域中扮演着重要的角色。
而在测绘技术中,矢量数据的提取与处理是一个至关重要的环节。
本文将探讨一些用于矢量数据提取与处理的技巧。
一、常见的矢量数据提取方法1. 手动绘制法手动绘制法是最为直接和常见的矢量数据提取方法。
通过在地图上勾勒出目标物体的边界和特征,来获得矢量数据。
这种方法虽然简单,但准确性和效率相对较低。
2. 遥感影像分析法遥感影像分析法使用遥感数据进行矢量数据提取。
通过分析卫星图像或航空影像中的目标物体特征,例如颜色、纹理和形状等,来提取矢量数据。
这种方法具有较高的准确性和效率。
3. 激光扫描测量法激光扫描测量法利用激光测距仪等设备进行数据采集,通过扫描物体表面来获得三维坐标点云数据,再根据数据处理算法进行矢量数据提取。
这种方法适用于复杂地形和建筑物等目标物体的测量和提取。
二、矢量数据处理技巧1. 数据清洗与去噪在矢量数据提取后,往往会存在一些不必要的数据噪声和错误。
因此,数据清洗与去噪是矢量数据处理的重要环节。
可以使用各种算法和工具,如滤波算法和拓扑检查等,来识别和去除异常值和错误数据,以提高数据质量。
2. 数据投影与坐标变换在不同的测绘系统和坐标系统之间,矢量数据经常需要进行投影和坐标变换以保证数据的一致性和准确性。
常见的数据投影和坐标变换方法包括空间插值法和变换矩阵法等。
3. 数据融合与整合当有多种数据源和多个对象需要提取时,常常需要进行数据融合与整合。
数据融合是将多个数据源的信息融合成一个整体,数据整合是将多个对象的信息整合到一个数据库或模型中。
这些技巧可以提高数据准确性和完整性。
三、矢量数据处理的应用领域1. 地理信息系统(GIS)矢量数据在GIS中得到了广泛应用。
通过提取和处理矢量数据,可以构建地理数据库、进行空间分析和建模等,为城市规划、资源管理和环境监测等领域提供决策支持。
2. 交通规划和导航系统矢量数据的提取与处理也在交通规划和导航系统中起着重要作用。
Windows矢量字体点阵数据提取的实现方法

是 通 过 一 定 的 方 式 预 先 储 存 在 计 算 机 系 统 的文 件 中 , 当 操
引 言
2 . Co l l e g e o f El e c t r i c a l En g i n e e r i n g a n d I n f o r ma t i o n,S i c h u a n Un i v e r s i t y ) A b s t r a c t :Ch a r a c t e r d i s p l a y i s wi d e l y u s e d i n e mb e d d e d s y s t e ms ,e s p e c i a l l y f o r t h e e mb e d d e d s y s t e ms d e s i g n wi t h o u t OS,g e t t i n g l a t t i c e
摘 要 :字 符 显 示 在 嵌 入 式 系统 有 着广 泛 的 应 用 , 尤其 是 在 没 有 操 作 系统 的 嵌 入 式 设 计 中 , 提 取 字 符 点 阵数 据 已 经 成 为 嵌
入 式设 计 中的 关键 一 步 。相 比 于 一般 通过 位 图 方 式 来 获 取 字符 点 阵数 据 , 本 文 介 绍 了如 何 利 用 Wi n d o ws操 作 系统提 供
服
掣
鹫 ≥
i
Wi n d o ws 矢 量 字 体 点 阵 数 据 提 取 的 实 现 方 法
王 小 亮 。 王 勇 汤 永 科 。 秦 磊
如何利用Word进行批量提取文本内容

如何利用Word进行批量提取文本内容引言近年来,随着信息技术的迅速发展,大量的文本数据被产生和积累。
在处理这些文本数据时,我们经常需要从大量的文档中提取出特定的信息,以满足需求。
Microsoft Word作为一种广泛使用的文本编辑和处理软件,具备了批量提取文本内容的强大能力。
本文将介绍如何利用Word进行批量提取文本内容,并按照以下几个方面进行阐述:预处理文档、使用通配符进行搜索、利用宏自动提取以及利用自定义属性批量提取。
一、预处理文档在进行批量提取文本内容之前,我们需要对文档进行一些预处理操作,以确保提取结果的准确性和统一性。
首先,我们应该将多个需要提取的文档保存在同一个文件夹中,便于后续的批量处理。
其次,为了提高搜索效率,我们需要将文档的内容整理为统一的格式,包括字体、字号、样式等。
此外,还可以通过Word的自动格式功能,自动根据一定的规则给文档进行编号、分段和标记,以便后续的批量提取工作。
二、使用通配符进行搜索在Word中,可以利用通配符进行搜索,以便快速定位和提取特定的文本内容。
通配符是一种模式匹配符,用于表示特定的字符或字符串。
通过在搜索功能中使用通配符,可以根据需要提取出匹配特定模式的文本内容。
例如,如果想提取出所有以“special”开头的单词,在搜索框中输入“special*”即可。
同样,通配符还可以用于匹配特定的字符长度,如“sp??ial”表示匹配中间有两个任意字符的“special”字符串。
通过灵活运用通配符,可以提取符合特定模式的文本内容,提高提取效率。
三、利用宏进行自动提取在Word中,宏是一种自动化操作工具,可以根据预设的规则和操作,快速进行大量的文本处理工作。
通过录制和编辑宏,可以实现批量提取文本内容的自动化。
首先,我们可以使用“录制宏”功能将一次性的提取操作录制下来,然后通过“编辑宏”功能进一步优化和扩展宏的功能。
例如,我们可以编写一个宏,通过指定标记或者样式来提取文档中的各种信息,并将它们保存到一个新的文档或者整理成一张表格。
毕业设计论文-汉字点阵字模自动生成及镶边处理程序编程开发

摘要点阵的显示和镶边处理在各行各业都有广泛的应用,在电视、电脑、手机、遥控器等的液晶显示屏上,都可以看见点阵的应用。
点阵是为集中反映晶体结构的周期性而引入的一个概念,通过点阵可以表示一系列的结构,可以是符号、图像或者汉字等。
本文讨论的是在中文Windows操作系统环境下,通过系统自带的矢量字体库取出对应字体的文字,将其表示为比特图的形式,进而转换为点阵的表示,并在屏幕上绘出点阵文字,以及在对应的点阵文字上进行镶边处理,生成对应字体的点阵字库。
利用VISUAL C++及其MFC进行界面编程,通过消息事件实现所需的功能。
其中主要的镶边算法为:对于一个汉字的点阵数组,按行列依次遍历每一个点,对每一个点判断周围的8个点是否有笔画存在,借此判断该点是否为边界点,如果该点上没有笔画存在则将该点显示为字的边,由此动态地实时地进行镶边处理。
此算法中并没有考虑生成边界的美观性,介于点阵镶边的局限性及镶边算法的难度,本文中的点阵镶边并没有针对笔画进行边界区分。
本文中生成的字库是基于GB2312标准的,按照区位码表的存储方式,存储固定尺寸(如16*16,24*24等)的点阵字体,并实现了指定区位码字符的读取显示功能。
关键词:点阵字体;字体转换;镶边算法;字库;C++;MFCABSTRACTDot matrix display and the edge treatment widely used in all walks of life, in television, computers, cell phones, remote control, LCD display, etc., can see the dot matrix of the application. Dot matrix is a concentrated reflection of the periodic crystal structure and the introduction of a concept lattice can be expressed through a series of structures, can be symbols, images or characters, etc..This article discusses Windows operating system in the Chinese environment, through the system comes with the corresponding vector font library removed the text font, expressed as bit-map of its form, then converted to dot-matrix representation, and draw points on the screen Front text, and text in the corresponding dot matrix trim on handle, generate the corresponding character dot matrix font. Using VISUAL C + + and MFC to interface programming, by news events to achieve the required functionality. One of the major trim algorithm: For a Chinese character dot-matrix array, according to the ranks of traversing each point in turn, on every point around 8 points to judge whether the stroke exist, to determine whether the point of the boundary points, if the point is that there is no point strokes appear as characters in the side, thus dynamically in real time to trim treatment. This algorithm does not take into account the aesthetics of the border generated, between the limitations of dot matrix trim and the trim algorithm difficulty, this article is not for the dot matrix trim distinguish between strokes to the boundary.Generated in this article are based on GB2312 standard font, in accordance with the location code table is stored, store fixed size (eg 16x16, 24x24, etc.) of the dot matrix fonts, and to achieve a specified area code characters read display.Key words: dot matrix fonts; font conversion; trim algorithm; font library;C + +; MFC目录第一章绪论 (1)1.1 课题的综述 (1)1.2 设计目标 (1)第二章准备知识 (2)2.1 字体 (2)2.1.1 矢量字体 (2)2.1.2 点阵字体 (2)2.1.3 两者的比较 (2)2.2 字符编码 (3)2.2.1 字符存储标准 (3)2.2.2 GB2312标准 (3)2.3 软件 (4)2.3.1 VC++6.0 (4)第三章 Windows编程与MFC基础 (6)3.1 Windows编程基础 (6)3.1.1 Windows API函数 (6)3.1.2 窗口与句柄 (6)3.1.3 事件与消息 (7)3.2 MFC基础 (7)3.2.1 MFC概述 (7)3.2.2 MFC基础类及其层次结构 (8)3.2.3 MFC中的全局函数 (9)3.2.4 入口函数 (9)3.2.5 MFC的消息映射 (9)第四章点阵字体的生成和显示 (11)4.1 提取字体 (11)4.1.1 提取系统的指定矢量字体 (11)4.2 矢量到点阵的字体转换 (11)4.2.1 矢量字体转换为位图 (11)4.2.2 位图转换为点阵字体 (12)4.3 点阵字体的屏幕显示 (12)第五章点阵字体的镶边处理 (14)5.1 镶边的意义 (14)5.2 镶边的方法 (14)5.3 镶边的要求 (14)5.4 镶边算法的设计 (15)5.5 镶边的显示 (16)第六章软件编程实现 (17)6.1 界面制作 (17)6.1.1 界面生成 (17)6.1.2 控件的设置 (17)6.2 点阵字体生成显示模块制作 (19)6.2.1 字体的生成 (19)6.2.2 字体的显示 (20)6.3 镶边模块的制作 (21)6.3.1 字体的镶边 (21)6.4 字库生成载入模块的制作 (22)6.4.1 字库的生成 (23)6.4.2 字库的载入 (24)6.5 各模块的整合 (24)第七章程序的改进和不足 (26)7.1 改进和完善 (26)7.2 程序的不足 (28)结束语 (29)致谢 (30)参考文献 (31)附录 (32)第一章绪论1.1 课题的综述如今,点阵的处理已经被用于各行各业,融入了每个人的生活。
电脑如何提取图片中的文字

电脑如何提取图片中的文字随着科技的发展,计算机视觉技术得到了迅猛的发展。
在过去,对于一张图片中的文字信息提取,需要依赖人工逐字逐句地进行,费时费力。
然而,现在的人工智能技术使得电脑能够自动地提取图片中的文字。
本文将介绍电脑如何提取图片中的文字的方法和技术。
一、OCR技术OCR(Optical Character Recognition,光学字符识别)技术是目前提取图片中文字信息最常用的方法之一。
它通过分析图片中的像素信息,将文字串联成真实的文本。
OCR技术可以分为两个主要步骤:图像预处理和文字识别。
图像预处理是为了提高文字识别的准确性。
它包括去除图片中的噪声、调整图像的对比度、清晰度和亮度等。
这些预处理步骤可以有效地优化图像,提高文字的可读性。
文字识别是OCR技术的核心部分。
这里主要使用了机器学习和深度学习的技术,训练模型来识别和理解图片中的文字。
目前,有很多开源的OCR框架和库可以使用,如Tesseract、OpenCV等。
这些工具提供了丰富的API和功能,可以满足不同场景下的文字识别需求。
二、文字检测在进行OCR文字识别之前,需要先进行文字检测,即确定图片中的文字区域。
文字检测通常使用的方法是基于特征的算法,如边缘检测、基于颜色的方法、基于纹理的方法等。
其中,边缘检测是最常用的方法之一。
通过检测边缘,可以获得文字的边界框,从而实现文字区域的提取。
三、训练模型文字识别的准确率和性能很大程度上取决于训练的模型。
训练模型的关键是准备大量的标注数据,即带有标签的图片和相应的文字信息。
训练模型的过程中,将数据输入到模型中进行训练,不断调整模型的参数,以获得更高的准确率和性能。
训练模型的方法有很多种,如支持向量机(SVM)、卷积神经网络(CNN)等。
这些方法可以在大规模的数据集上进行训练,以满足不同场景下的文字提取需求。
四、后期处理在文字提取完成后,还需要进行一些后期处理,以提高识别结果的准确性。
常见的后期处理方法包括:错误校正、文本补全和文本排版等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Windows矢量字体点阵数据提取的实现方法王小亮;王勇;汤永科;秦磊【摘要】Character display is widely used in embedded systems,especially for the embedded systems design without OS,getting lattice of character has played a crucial role in embedded paring with the general technique to get lattice of vector font through bit-map,this paper introduces a new method that can easily and quickly get lattice of any vector font installed in Windows system by using API of Windows OS.The program interface is simple and beautiful,and the function of the program is powerful and practical.%字符显示在嵌入式系统有着广泛的应用,尤其是在没有操作系统的嵌入式设计中,提取字符点阵数据已经成为嵌入式设计中的关键一步。
相比于一般通过位图方式来获取字符点阵数据,本文介绍了如何利用 Windows操作系统提供API函数提取矢量字体点阵数据的方法,程序可以方便快速提取Windows系统所安装的所有矢量字体的点阵数据。
程序界面简洁美观,功能强大,实用性强。
【期刊名称】《单片机与嵌入式系统应用》【年(卷),期】2014(000)006【总页数】4页(P30-33)【关键词】嵌入式系统;矢量字体;点阵;快速;API【作者】王小亮;王勇;汤永科;秦磊【作者单位】四川大学电子信息学院,成都 610044;四川大学电子信息学院,成都 610044;四川大学电子信息学院,成都 610044;四川大学电气信息学院【正文语种】中文【中图分类】TP399随着显示技术日新月异的发展,各种性能的显示器越来越广泛地运用于嵌入式产品中。
用户界面友好已经成为一个产品能否获得成功至关重要的因素。
在Windows 操作系统中,系统本身为用户提供了各种丰富的矢量字体,同时用户也可以通过简单地安装相应的字体文件,然后在编辑软件中点击相应的按键就可以使用各种矢量字体。
因为PC系统中,可以非常方便和快捷地获取各种矢量字体,所以在嵌入式系统开发设计中,我们会思考如何利用Windows系统所提供的丰富的矢量字体来获取所需要的点阵数据。
本文利用Windows 提供的API函数,设计实现了矢量字体字模提取的工具软件。
在纸上写字时,我们需要在纸上把字符的所有的点都画出来,这样就完成了字符的书写。
计算机显示字符也是通过把字符轮廓中相应的点阵数据显示在显示器上,从而实现计算机“书写”功能。
计算机所显示的字符点阵数据是通过一定的方式预先储存在计算机系统的文件中,当操作系统需要显示字符时,通过相应程序去查找对应的点阵数据,然后达到显示字符的效果。
矢量字体(vector font)中每一个字形是通过数学曲线来描述的,它包含了字形边界上的关键点,连线的导数信息等,字体的渲染引擎通过读取这些数学矢量,然后进行一定的数学运算来进行渲染。
这类字体的优点是,字体实际尺寸可以任意缩放而不变形、变色。
矢量字体主要包括Type1、 TrueType、OpenType等几类,这些格式都是与平台无关的。
由于矢量字体具有以上各种优势,所以在嵌入式产品的人机界面设计中有着广泛的应用。
在Windows 系统当中提取矢量字体的字模,一般有两种方法。
一种方法,通过截取字体在当前Windows系统DC设备当中的位图,然后根据位图的像素元素提取相应的点阵数据。
当字符数目比较多的时候,这种方法的缺点是提取速度慢,需要通过程序处理大量的图片像素数据来获取字符点阵。
这种方法无论是从时间、空间还是内存空间来看,对系统的消耗都是非常大的。
同时,如果用户输入的字符数量非常大时,软件界面需要提供比较大的输入区以方便用户输入,所以这种提取方式对于程序输入界面有比较高的要求,且不易支持直接从文本文件直接输入字符。
另一种方法是利用Windows系统的API函数GetGlyphOutline,该函数可以方便快捷地提取矢量字体字符点阵数据,并且可以很好地支持从文本文件中读取字符。
面对大量字符数据输入时,获取点阵数据所需要的时间量也很少。
GetGlyphOutline函数声明如下:DWORD GetGlyphOutline(HDC hdc,);GetGlyphOutline函数是Windows系统的API函数,在使用VC++开发时,这个函数被封装在DC类中,是DC类的一个成员函数。
当应用程序调用GetGlyphOutline 函数时,该函数可以通过LPGLYPHMETRIC结构体指针返回所需的字符点阵数据所占的矩形区域信息。
该函数所得到的点阵数据是gmBlackBoxX与gmBlackBoxY所组成的最小矩形区域的点阵数据,如图1所示。
实际应用中,所需要显示的字符点阵数据却是gmCellIncX与gmCellIncY所组成的大矩形区域内的点阵数据,所以调用GetGlyphOutline所得到的字符的点阵数据时,还需要把最小矩形以外的边框区域加上,这需要通过相应的矩阵变换把最小矩形的点阵数据区平移到以gmCellIncX与gmCellIncY所组成的大矩形区域的中间位置。
在Windows 操作系统当中实践表明,GetGlyphOutlinep这个函数返回的结构体LPGLYPHMETRICS中的gmCellIncY这个数值返回是0,这是操作系统版本本身的原因,因此需要通过另外的方法来获取。
我们采用GetTextExtent(CString,int)和GetTextMetrics(TEXTMETRIC *tm),通过以上两个函数可以获取字符的宽度与高度信息,然后通过相应矩阵变换的变换,就可以得到所需的字符字模点阵数据。
GetGlyphOutline 函数获取的字符点阵数据的宽度是4字节对齐,所以要做4字节对齐处理。
对于宽度不是以8位对齐的字符数据,应该在补足8位后,再做4字节对齐处理。
获取字符点阵数据的程序如下:CString str ( “华”); //字符CDC dc; //CDC 类,有GetGlyphOutline方法dc.CreateDC(_T("DISPLAY"), NULL, NULL, NULL);CFont *poldfont=dc.SelectObject(&m_font); //字体设置TEXTMETRIC tm;GLYPHMETRICS pGL;MAT2 mat2 = {{0, 1},{0, 0},{0, 0},{0, 1}}; //转换矩阵dc.GetTextMetrics(&tm);int bitWidth =tm.tmAveCharWidth;int ch = str.GetAt(0);int len =dc.GetGlyphOutline(ch, GGO_BITMAP, &pGL, 0, NULL, &mat2); CSize cs = pDC->GetTextExtent(str,1);int widthEx = cs.cx;bitWidth = widthEx;if(bitWidth %8 ==0){bitWidth = bitWidth /8;}else{bitWidth = bitWidth /8+1;}int boxXByteWidth = ALIGN(pGL.gmBlackBoxX, 4);int FontOffY = tm.tmAscent - pGL.gmptGlyphOrigin.y;unsigned char *pBuf = new unsigned char[bufSize];if(pBuf != NULL){memset(pBuf, 0, bufSize);if(len > 0){unsigned char *pSrc = new unsigned char [len];unsigned char *pDest = (unsigned char *)pBuf;dc.GetGlyphOutline(ch, GGO_BITMAP, &pGL, len, pSrc, &mat2);for(int i = 0; i < len / boxXByteWidth; i++){//copy databuf to pDestmemcpy(pDest + i * (bitWidth /8), pSrc + i * boxXByteWidth, boxXByteWidth);}//转换矩阵,把GetGlyphOutline得到的点阵转换成 //含有边框的点阵数据MartixCovert(pDest,bitWidth, bitHeigh ,FontOffX, FontOffY);}}dc.SelectObject(poldfont);dc.DeleteDC();delete []pSrc;delete []pDest;通过上文分析已经得到单个字符的点阵数据,然而在实际应用当中,获取单个字符的点阵数据是没有实用性的,所以在上文的基础上,利用VC++开发工具,开发了实用的字模点阵数据提取软件。
软件支持两种字符输入方式,一是通过VC++中的CEdit类来接收用户直接输入的字符,二是利用CStdioFile类来实现文本文件的输入;利用CString类对通过以上两种方式输入获取字符进行串化处理(用CString保存),同时利用CFont类实现对用户对字体格式修改操作,然后对所得到的字符串做空格过滤处理;最后根据上文介绍的方法获取字符串中每一个字符的点阵数据。
对于获取到的点阵数据作输出格式化处理,为其加上相应的数据信息头,并用“{}”框起,结尾处加上“;”,以实现符合C语言中变量声明方式,这样在实际应用当中只需修改文本文件的后缀名,在文件中加上相关的变量声明就可以在直接在实现工程中应用。
为了把软件开发成为通用性强的应用软件,本软件在提取字符点阵数据的基础上增加了提取图像像素数点阵的功能。
这个功能是以图像文件操作为基础,可以支持PNG、BMP、JPEG等图像文件输入,提供用户创建图像文件的功能,同时支持用户的绘图操作。