字体基本知识工作报告.doc_第1页
字体基本知识工作报告.doc_第2页
字体基本知识工作报告.doc_第3页
字体基本知识工作报告.doc_第4页
字体基本知识工作报告.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

字体基本知识工作报告(2009-02-11 12:38:25)标签:杂谈 工作任务:1、学习字体、字形、字体大小、相关知识2、学习Word对字体的处理,了解控制字体的主要参数3、学习AutoCAD, CorelDraw中对字体的处理,全面了解各软件对字体的描述、控制4、总结字体相关知识,为实现字体的全面描述、表达、精确控制做准备内容提要: 计算机里面常用的字体有点阵字体与矢量字体,它们存储的信息是不相同的。本阶段工作主要研究了字体在计算机里面的表示方法,点阵字体与轮廓字体信息的提取,基于MFC GDI工具的字体处理以及一些应用程序如CorelDraw与AutoCAD对字体处理的方法。主要内容:一字体基础知识字体的概念是在印刷业中最早提出的。随着计算机技术的发展,出现电子出版技术,从而逐步形成了相应的字体技术。字体技术的发展经历了三个阶段:(1)点阵字体;(2)矢量字体;(3)曲线轮廓字体。其中曲线轮廓字体包括两种类型,一种为 PostScript字体,此字体主要用于打印,另一种为TrueType字体和Open Type字体。TrueType是Apple公司和 Microsoft公司合作开发的页面描述语言(Page Description Language,PDL)TrueImage中的字形描述部分。TrueType字体(简称 TTF)采用直线和二次Bezier曲线来描述字符的轮廓,结合了光栅技术和矢量技术的优点,克服了以往所有点阵字体、矢量字体和向量轮廓字体的缺点,字体可以任意放大、缩小、旋转和变形而不会影响输出质量,提供了真正的设备无关性。二次Bezier曲线既能保证轮廓曲线的光滑性,又有利于提高字形还原速度。另外,TrueType所特有的丰富的指令集,不仅弥补了TTF的二次曲线描述轮廓的不足,而且增强了TTF字形描述的灵活性。若要提高字体的质量,不仅可以通过数据信息来实现,而且可通过增加指令来进行。OpenType字体从文件结构来说,确切地讲它是TrueType 格式的扩展延伸,它在继承了TrueType格式的基础上增加了对PostScript字型数据的支持,所以Open Type的字型数据即可以采用 TrueType的字型描述方式也可以采用PostScript的字型描述方式,这完全由字体厂商来选择决定。从文件结构的角度来讲Open Type或许并不是一种真正新的字体格式,但是该字体格式所增加的排版特性却从功能上为用户开辟了新的用字方式,为用户提供了更高效率的排版模式。TrueType字体与OpenType字体的文件结构,都有比较规范的结构以便于应用程序提取字体信息并进行处理。计算机要对字符进行处理要对字符进行编码,常用的字符编码方式有如下几种:ASCII:码由一个字节中的7位(bit)表示,范围是0x00 - 0x7F 共128个字符,后来人们发现用7位不能表示所需要的所有字符,所以用一个字节的全8位字符,称之为扩展ASCII码。GB2312-80: 是指我国1981年公布的“中华人民共和国国家标准信息交换汉字编码”, 用连续的两个字节来表示一个字;Unicode: 为满足不同国家对编码的需求而制定,是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求,又称Unicode(统一码、万国码、单一码)。二点阵字体字模的提取方法点阵字体的字模信息是按字符编码进行存储的,要提取计算机中字体的字模信息,还需要了解另外两种汉字编码还有机内码,区位码:区位码:将GB 231280的全部字符集组成一个9494的方阵,每一行称为一个“区”,编号为0194,称“区码”;每一列称为一个“位”,编号为0194,称“位码”,这样得到GB 231280的区位图,用区位图的位置来表示的汉字编码,称为区位码,用两们十进制数表示。机内码:为了避免ASCII码和国标码同时使用时产生二义性问题,大部分汉字系统都采用将国标码每个字节高位置1作为汉字机内码。这样既解决了汉字机内码与西文机内码之间的二义性,又使汉字机内码与国标码具有极简单的对应关系。国标码,机内码,区位码有如下对应关系:区位码(十进制)的两个字节分别转换为十六进制后加20H得到对应的国标码;机内码是汉字交换码(国标码)两个字节的最高位分别加1,即汉字交换码(国标码)的两个字节分别加80H得到对应的机内码;区位码(十进制)的两个字节分别转换为十六进制后加A0H得到对应的机内码。也即: 国标码高字节=区码+20H 国标码低字节=位码+20H 机内码高字节=国标码高字节+80H=区码+A0H 机内码高字节=国标码低字节+80H=位码+A0H汉字点阵字模代码是按照区位码的顺序在汉字库中存放的,而区位码与计算机内部使用的机内码有一一对应的关系,从而可以根据机内码找到汉字字模在汉字库中的位置,并将其提取出来,其实现步骤如下:1) 获取汉字的机内码;2) 通过汉字的机内码推算出区位码;3) 同区位码计算出汉字在字库中的位置;4) 从该偏移地址中读取32字节(16*16位)或者128字节(32*32位),就是相关字符的点阵字模代码。Visual C+编程实现:以下一段程序从二进字点阵字库文件HZK16中按地址寻出某个汉字字符(m_InputChar)的字模代码:Void processChinese(CString m_InputChar, ) unsigned char th = m_InputChar.GetAt(0); unsigned char tl = m_InputChar.GetAt(1); /开辟字库缓冲区大小,一个字节8个点 unsigned char LibbuffPOINTER_WIDTH*POINTER_HEIGHT3; unsigned char VerLibbuffPOINTER_WIDTH*POINTER_HEIGHT3; ULONG address; UCHAR BitIndex; CFile myfile; /清空显示缓冲区 m_HorizonLib.Empty(); m_VerticalLib.Empty(); /根据汉字内码计算在文件中地址 address = (th-0xa1)*94+(tl-0xa1)*32; /打开字库文件 if(!myfile.Open(HZK16,CFile:typeBinary|CFile:modeReadWrite,NULL) AfxMessageBox(error); return ; /读取字模缓冲区 myfile.Seek(address,CFile:begin); myfile.Read(Libbuff,sizeof(Libbuff); myfile.Close(); /横排-竖排 for(int i = 0;isizeof(VerLibbuff);i+) BitIndex = 0x01; UINT HorizonRow; UINT HorizonCol; VerLibbuffi = 0; /找出列号 if(i1) HorizonCol = i; else HorizonCol = i - (sizeof(VerLibbuff)1); for(int j=0;j8;j+) /找出行号 if(i1) HorizonRow = j; else HorizonRow = j+8; UCHAR temp2 = 0x80; /找到对应位置位 if(LibbuffHorizonRow*2+(HorizonCol3)&(temp2(HorizonCol%8) VerLibbuffi = VerLibbuffi | BitIndex; BitIndex = BitIndex1; /将字模显示出来 DisplayResult(Libbuff,POINTER_WIDTH,POINTER_HEIGHT); /显示横排结果 for(i=0;isizeof(Libbuff);i+) char temp3; unsigned char Value = Libbuffi; if(i%8)=0)&(i!=0) m_HorizonLib += rn ; m_HorizonLib += 0x ; if(Value16) temp0 = 0; itoa(Value,&temp1,16); else itoa(Value,temp,16); m_HorizonLib += temp; /显示竖排结果 for(i=0;isizeof(VerLibbuff);i+) char temp3; unsigned char Value = VerLibbuffi; if(i%8)=0)&(i!=0) m_VerticalLib += rn ; m_VerticalLib += 0x ; if(Value0) m_fSetFont.Detach(); m_fSetFont.CreateFont(m_iFontSize, /字体的逻辑高度 int nHeight 0, /字体的逻辑宽度 int nWidth 0, /出口矢量与X轴的角度 int nEscapement m_fFontAngle, /字符基线与X轴的角度 int nOrientation FW_NORMAL, /字体磅值int nWeight m_fFontItalic, /该值非0为斜体BYTE bItalic m_fFontUnderLine, /非0则加下划线 BYTE bUnderline 0, /该值非0则加删除线 BYTE cStrikeOut DEFAULT_CHARSET, /字体的字符集 BYTE nCharSet OUT_CHARACTER_PRECIS, /输出精度BYTE nOutPrecision CLIP_CHARACTER_PRECIS, /剪裁精度BYTE nClipPrecision DEFAULT_QUALITY, /输出质量BYTE nQualityDEFAULT_PITCH|FF_DONTCARE, /调距和字体族BYTE nPitchAndFamily m_sFontFaceName); /字体的字型名LPCTSTR lpszFaceNamem_ctlDisplay.SetFont(&m_fSetFont);附源程序(myFontView)。四CorelDraw、AutoCAD中字体的处理方法CorelDraw12是当今十分流行的矢量图形处理软件,相对于位图显示主要靠的是像素,矢量图形有的显示是由里面图元的形状来定义的,即定义数个点然后将这些点连起来,所以矢量图形可以做到放大不失真。CorelDraw显示字体是矢量字体先获得字体的轮廓,然后用曲线将这些点连起来,根据字体显示的大小,其控制点的数目也是不相同的,这样可以使存储的控制点信息与字体显示的效果达到一个比较好的平衡。CorelDraw对字体还有以下特点:1 字体的轮廓与字体的填充是可以分开的,可以对任意一部分进行单独的设置。2 画笔功能可以自定义的做自己喜欢的字体样式,实际上,这个时候,是将字当作一个矢量图形进行编辑了,可以对其中的任意一笔做自己喜欢的处理。另外,CorelDraw集成了大量的字体,还可以有自己用的字体。3 CorelDraw可以将字体的轮廓变换成曲线,这样,也就可以用Bezier曲线工具与形状工具编辑了。附件中图1分别表示了这几种效果的应用,图2与图3是图1同一个部位的放大,显示效果不相同。AutoCad2008中的字体处理方法AutoCAD是目前微机上广泛使用的绘图平台,其上使用的汉字常常是通过形文件(.shx)来实现的,同时也支持TrueType字体处,AutoCAD与CorelDraw不相同,将其上面的字放大后可以发现,其上面的字是用点与点之间的直线连接起来的。AutoCAD 2008中放大的字母”u”下半部分CorelDraw与AutoCAD字体显示其实都是先从字库里面调出字体轮廓信息,然后再用自己的方法对其进行处理,在提取字体信息之后,CorelDraw字体处理的要点在:1 选取控制点的数目,位置;2 用曲线对其进行拟合;3 根据曲线做其它的扩展功能。AutoCAD字体处理的要点在:1 根据字体显示大小选取直线控制点的数目位置,以保证字体显示的质量;2 对提取到的字体拟合与后处理。五字体有关知识总结本次工作报告总结了字体在计算机里面的表示方法,点阵字体与轮廓字体信息的提取,基于MFC GDI工具的字体处理, Microsoft Word, CorelDraw与AutoCAD对字体处理的方法。自此,已经了了解了字体处理的基本流程与方法。还需要进一步了解TrueType字体文件的结构,以便进一步方便的提取字体轮廓信息。 基于此基础,可以进行字体轮廓算法提取的研究,其它应用程序如CorelDraw与AutoCAD字体轮廓的提取以便对这些文件中字体的格式的支持.六参考资料1 百度百科,机内码国标码区位码,/view/486220.htm,2006.9.16;2 利用VC+实现汉字字模提取与小汉字库的生成,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论