专利名称::一种文本光圈的实现方法及装置的制作方法
技术领域:
:本发明涉及文字处理领域,尤其涉及一种文本光圈的实现方法及装置。
背景技术:
:在电子地图和文本打印等领域,文本输出是一项重要的内容。电子地图带有文本标识,用户可以非常清晰的识别地物,辨认方位。可读性是评判文本输出的重要指标之一,影响文本可读性的参数是文本输出的颜色和文本输出区域本身的颜色。如果文本的颜色和区域的颜色相差比较大,那么输出文本的可读性就比较好,反之就比较差。考虑一种极端的情况,如果文本的颜色和区域的颜色完全一致,那么就不会有文本输出,也就完全没有了可读性。为了增强可读性,一般要在文本输出的区域使用和文本颜色相差比较大的颜色作为背景色,这个背景色就是文本输出的光圈。选择合适(文本颜色和光圈颜色相差比较大即为合适)的光圈效果,文本的可读性会大大的增强。在图l中,文本"四环"颜色为深色调的黑色,其周围的颜色也为深色调的蓝色,由于不带光圈效果,文本输出的效果很不好。在图2中,由于使用了浅色调的白色作为光圈的颜色,可读性要好很多。带有光圈效果的文本输出一般有五个参数文本内容,文本字体,文本颜色,光圈颜色,光圈半径。图3说明了这五个参数,其中光圈半径用于描述黑色绘制的文本和黄色绘制的文本边缘之间的距离。当前实现光圈效果的技术大多脱胎于BobPowell的文章,这个技术方案主要利用了图像绘制的差值算法对文本输出边界的模糊效果。当图像放大的时候,差值算法决定了边界像素的复合模式,简单的差值算法仅仅是把一个像素作为整体渲染,而复杂的差值算法(例如双线性差值和双三次差值)会采用反走样技术把边界像素取平均值渲染。这个技术方案的具体步骤是1)、创建一个位图对象,其长宽和原始绘制区域的长宽呈一个固定的比例关系r(例如1:5);2)、构造一个路径对象,把要输出的文本放置在里面;3)、创建一个基于位图的绘制对象,并且按照比例关系r设定其变换矩阵;4)、使用光圈颜色填充路径对象,为了更好的效果,还可以使用画笔绘制路径对象的边界;5)、设定合适的差值模式,把位图对象按照比例关系r放大绘制到给定的绘制区域内;6)、绘制原始的文本内容,这样两次绘制的结果就会生成光圈效果。下面是实现这个方案的C#代码privatevoidForml—Paint(objectsender,System.Windows.Forms.PaintEventArgse){3Bitmapbm=newBitmap(this.ClientSize.Width/5,this.ClientSize.Height/5);GraphicsPathpth=newGraphicsPath();pth.AddString("TextHalo",newFontFamily("Verdana"),(int)FontStyle.Regular,100,newPoint(20,20),StringFormat.GenericTypographic);Graphicsg=Graphics.Fromlmage(bm);Matrixmx=newMatrix(1.0f/5,0,0,1.0f/5,-(1.Of/5),-(1.Of/5));g.SmoothingMode=SmoothingMode.AntiAlias;g.Transform=mx;Penp=newPen(Color.Yellow,3);g.DrawPath(p,pth);g.FillPath(Brushes.Yellow,pth);g.Dispose();e.Graphics.Transform=newMatrix(1,0,0,1,50,50);e.Graphics.SmoothingMode=SmoothingMode.AntiAlias;e.Graphics.Interpo1ationMode=Interpo1ationMode.HighQimlityBicubic5e.Graphics.Drawlmage(bm,ClientRectangle,0,0,bm.Width,bm.Height,GraphicsUnit.Pixel)e.Graphics.FillPath(Brushes.Black,pth);pth.Dispose();}这个实现方案的主要缺点有1)这个实现方案大约有17行C#代码,比较复杂,效率也比较低;2)输入参数多,难以控制;3)比例因子r,画笔宽度(用于控制光圈半径)等都不容易控制,光圈效果难以控制;4)对字体大小比较敏感,当使用较小字体的时候,上面的方法效果不太理想;而在电子地图领域,小字体的使用是很常见的。
发明内容为了解决上述的技术问题,本发明提供了一种文本光圈的实现方法及装置,其目的在于,提供更加简单、有效并易于控制的文本光圈实现方案。本发明提供了一种文本光圈的实现方法,包括步骤1,构造路径对象,按照设定的字体将文本内容添加到路径对象中;步骤2,按照光圈的颜色和光圈的半径构造画笔,使用画笔绘制路径对象;步骤3,按照文本内容的颜色填充路径对象。画笔的宽度为光圈的半径的2倍。本发明提供了一种文本光圈的实现装置,包括路径对象构造模块,用于构造路径对象,并按照设定的字体将文本内容添加到路4径对象中;画笔构造模块,用于按照光圈的颜色和光圈的半径构造画笔,并使用画笔绘制路径对象;颜色填充模块,用于按照文本内容的颜色填充路径对象。画笔的宽度为光圈的半径的2倍。本发明的实现方案非常简单,效率比较高,不使用比例因子r,而且输出文本的光圈半径非常容易控制。图1是不带光圈的文本输出示意图;图2是带浅色光圈的文本输出示意图;图3是光圈参数示意图;图4是本发明提供的实现效果和现有技术的实现效果比较示意图;图5是光圈半径为1个像素的实现分解过程示意图;图6是光圈半径为4个像素的实现分解过程示意图。具体实施例方式本发明提出了一种新的实现光圈效果文本输出的方法,这个方法非常简单(只有5,6行代码),效率比较高,不使用比例因子r,而且输出文本的光圈半径非常容易控制。图4是本发明提供的实现效果和现有技术的实现效果比较示意图,左边是BobPowell所提供的方法,右边是本发明提供的方法。具体的参数是文本内容"伟大中国",文本字体"微软雅黑(12pt,24pt,36pt,48pt,60pt)",文本颜色黑色,光圈颜色白色,光圈半径1.5pixel,2pixel,2pixel,3pixel,3pixel,pixel代表像素大小。可以看到当字体较小的时候,本发明提供的方法效果更好。文本的字形存储在字体文件中,一般存储字形的矢量信息(在这里不考虑栅格字体)。当我们输出文本的时候,操作系统从字体文件中取出字形信息,然后以多边形的方式填充,这样生成文本的输出。在几乎所有的绘制引擎(GDI,GDIPLUS,QtGUI或者Cairo)中,都存在所谓的路径的概念。路径用来存储直线,曲线和各种不同的形状等。在上面BobPowell的方法中,也是用了路径对象。本发明提供的方法是首先是使用路径对象,存储指定字体文本输出的字形信息;然后构造光圈画笔,画笔的颜色是光圈颜色,画笔的宽度是光圈半径的2倍,使用这个画笔绘制路径对象;最后使用文本的颜色填充路径对象。在这个过程中,光圈画笔绘制的路径对象边界有一部分不会被填充覆盖,也就是说另一部分会溢出,溢出的部分生成光圈半径。下面我们详细说明这个过程。A)、构造路径对象使用路径对象存储文本内容,实际上路径对象存储的是文本的字形信息,这些信息大多是直线或者曲线连接的多边形数组,具体内容由字体文件存储信息决定。下面使用画笔绘制路径的边界,使用画刷填充路径,其实就是绘制这些多边形的边界,填充多边形的内部。B)、绘制路径对象的边界路径对象存储了字形的多边形数组,然后构造光圈画笔,绘制这些多边形数组。虽然这些多边形的边界线没有宽度,但是绘制这些边界线的画笔是有宽度的,所以实际上绘制出来的是有一定宽度的柱条;而多边形边界线正好位于这些柱条的正中心。这样,绘制的柱条会被后续的填充操作压盖一半的宽度,所以构造画笔的宽度正好是光圈半径的两倍。C)、填充路径对象最后填充路径对象,填充会覆盖一部分上一步的绘制结果。因为我们已经按照光圈半径设定了画笔宽度,所以绘制溢出的部分正好是指定的光圈半径。图5和图6是上面实现方案的分解过程,图5中的光圈半径是1个像素,图6中的光圈半径是4个像素,其中"+"表示画笔绘制结果和画刷填充结果原地叠加。本发明所提供的文本光圈的实现方法具体如下1)、构造路径对象,按照指定的字体把文本内容添加到路径对象当中;2)、按照光圈的颜色和光圈的半径构造画笔,使用画笔绘制路径对象;3)、按照文本的颜色填充路径对象。下面是Cft实现的代码voidtest(Graphicsg,Stringtext,Fontfont,ColortextColor,ColorhaloColor,floathaloRadius){GraphicsPathpth=newGraphicsPath();pth.AddString(text,font.FontFamily,font.Style,font.Size,newPoint0,StringFormat.GenericTypographic);g.SmoothingMode=SmoothingMode.AntiAlias;Penp=newPen(haloColor,2.0f氺haloRadius);g.DrawPath(p,pth);g.FillPath(textColor,pth);pth.Dispose();}上述代码非常的简单,核心代码不到6行,执行效率比较高。经过对比测试,本发明提供的方法在效率上比BobPowell的方法平均提高了32%的时间(循环100次)。而且,可以看到,本发明可以完美的控制光圈的半径。下面是两种方法在效率上的对比结果测试环境:NetFramework3.5,MSVS2008C#,WindowsXpSP3,LenovoX200;测试文本"伟大中国";文本颜色黑色;光圈颜色黄色;循环次数100;<table>tableseeoriginaldocumentpage7</column></row><table>本领域的技术人员在不脱离权利要求书确定的本发明的精神和范围的条件下,还可以对以上内容进行各种各样的修改。因此本发明的范围并不仅限于以上的说明,而是由权利要求书的范围来确定的。权利要求一种文本光圈的实现方法,其特征在于,包括步骤1,构造路径对象,按照设定的字体将文本内容添加到路径对象中;步骤2,按照光圈的颜色和光圈的半径构造画笔,使用画笔绘制路径对象;步骤3,按照文本内容的颜色填充路径对象。2.如权利要求l所述的文本光圈的实现方法,其特征在于,画笔的宽度为光圈的半径的2倍。3.—种文本光圈的实现装置,其特征在于,包括路径对象构造模块,用于构造路径对象,并按照设定的字体将文本内容添加到路径对象中;画笔构造模块,用于按照光圈的颜色和光圈的半径构造画笔,并使用画笔绘制路径对象;颜色填充模块,用于按照文本内容的颜色填充路径对象。4.如权利要求3所述的文本光圈的实现方法,其特征在于,画笔的宽度为光圈的半径的2倍。全文摘要本发明涉及一种文本光圈的实现方法及装置。该实现方法包括步骤1,构造路径对象,按照设定的字体将文本内容添加到路径对象中;步骤2,按照光圈的颜色和光圈的半径构造画笔,使用画笔绘制路径对象;步骤3,按照文本内容的颜色填充路径对象。和传统的方法对比,本发明的实现方案非常简单,效率比较高,不使用比例因子r,而且输出文本的光圈半径非常容易控制。文档编号G06F17/21GK101777040SQ20101012220公开日2010年7月14日申请日期2010年3月10日优先权日2010年3月10日发明者赵红超申请人:中国科学院计算技术研究所