使用输入黑白位图来生成加粗的抗混叠位图的制作方法

文档序号:6553637阅读:273来源:国知局
专利名称:使用输入黑白位图来生成加粗的抗混叠位图的制作方法
使用输入黑白位图来生成加粗的抗混叠位图
背景技术
1. 发明领域
本发明涉及字体呈现技术;尤其涉及用于执行字体字符的算法模拟加粗 (embolden)。
2. 背景和相关技术
计算技术实现了各种各样的应用程序。这些应用程序中的某一些通过经由例 如鼠标、键盘、话筒、摄像机等从人类用户接收输入,或通过经由例如扬声器、显 示器或打印机向人类用户提供输出来与人类接口。特别地,由于视力是这样一种主 要的人类感觉能力,因此人类用户通常依赖于某种类型的打印机或显示器来解释计 算结果和/或与应用程序接口。
一种类型的显示素材是字符。字符集(不论是文本还是其它)通常可在逻辑 上组合在一起。字体表示字符的逻辑分组的一个示例。特别地,字体是特定样式和 大小的一组可打印或可显示字符。字体的字符通常被称为"字形"。
字体的字符(字形)可由轮廓或嵌入式位图来描述。轮廓通过描述字符形状 的周线来描述字符。这一轮廓更易于縮放。在光栅化过程期间,软件可将轮廓转换 成适用于在给定期望的磅值或每EM像素数(ppem)时的显示。
嵌入式位图通常是对应于特定ppem的手动预先设计的位像。通常仅对低 和中ppem以及通常比从未精调(unhint)轮廓的光栅化得到的要求更高图像质量 的ppem提供嵌入式位图。精调(hinting)是对轮廓的条件修改,它提出了改善对 低卯em所呈现的结果的质量的另一种方式(与嵌入位图相比)。
传统上,具有相对少量的字符和相对简单的字符形状的字体(诸如拉丁)中 的字符由精调的轮廓来描述。另一方面,具有大量字符和相对复杂的字符形状的字 体(诸如东亚字体,以下也称为EA)中的字符由未精调轮廓来描述,且通常由一 系列嵌入式黑白位图(以下也称为BW)来描述。这些更复杂字体通常对于某些但 不必是全部低和中ppem具有嵌入式位图。此外,嵌入式位图不必覆盖该字体中的
6
全部字符。字体极少包含抗混叠(以下也称为AA)嵌入式位图。极少(如果有的
话)字体包含CLEARTYPE (以下也称为CT)格式的嵌入式位图。
在某些情况下,期望"加粗"字符。加粗的字符往往具有更厚重的视觉或印 刷粗细度。加粗的字符通常代替其相对的常规粗细度字符而提供。存在其中需要加 粗字符的若干情况。例如,字符通常被加粗以强调该字符所传达的含义。
如果存在对表示更重粗细度的字体字符的单独设计且这些设计以可由呈现软 件识别为与原始字体相关联的方式来储存,则字体具有真实粗体形式。与字体的字 符相关联的真实粗体设计不必遵循对于原始常规粗细度字体的字符的统一加粗变 换。给定字符的统一形式,字符的不同元素在适当时以不同方式来加粗。通常,人 类参与对加粗字体的自定义设计以考虑到对更真实的高质量加粗外观作出贡献的 大量主观审美判断。
传统上,大多数常用的具有较少量字符和相对简单的字符形状的字体(诸如 拉丁字体)具有相关联的真实粗体形式。然而,由于与字体的自定义设计相关联的 时间和成本,大多数具有更复杂字符和较大量字符的更大的字体没有相关联的真实 粗体形式。此外,对这些复杂字符集的这一真实粗体字体的设计可能是极其昂贵的。 结果,如果用户选择粗体选项,则由呈现引擎执行模拟加粗。
模拟加粗是由呈现引擎基于来自常规字体的数据执行的一种自动化的算法过 程。当前应用的模拟加粗是由一统一算法来执行的,该算法并不总是对改善加粗的 字体数据的质量和外观的原始设计意图或众多主观判断敏感。
尽管当前对模拟加粗应用的算法对具有较简单字符的字体提供了相当清晰的 结果,但是这些算法通常无法为具有更复杂且更密集字符的字体提供清晰的结果。
在一种简化观点中,呈现过程可被划分成三个阶段。在第一阶段,访问来自 字体文件的信息,且如有需要将其转换成光栅化器可读格式。在第二阶段,进行将 光栅化器可读字体格式转换成称为位图的二维值数组的光栅化过程。对于"简单位 图",位图具有每像素一个值,而对于"过缩放(overscale)位图",如CLEARTYPE 位图的情况,则具有每像素一个以上值。值可以是用于黑白(BW)位图的简单的 二进制值(例如,0或1),或者可以是用于AA位图的值范围(例如,从0到16)。 在第三阶段,进行位图值到显示器像素(或像素子分量)的实际映射,从而导致该 字符被显示。
模拟加粗在光栅化过程期间的第二阶段中进行。尽管将位图值映射到显示器 的第三阶段可影响对特定加粗算法的选择和/或一旦选择了一算法之后对参数的调
整,但为清楚地描述本发明的基本原理和实施例,在说明书中可省略特定种类的映 射。由于模拟加粗算法在光栅化过程的第二阶段期间进行,因此第二阶段处理将是 此处讨论的主要阶段。
当前,有三种主要呈现模式即黑白(BW)、抗混叠(AA)和CLEARTYPE (CT)。常规上,在光栅化阶段,呈现模式定义了位图的最终格式,尤其是在应 用了加粗的情况下加粗的位图的输出格式。
存在可影响对呈现模式的选择的各种因素。这些因素可包括,例如设备属性 和设置、所请求的ppem、字体数据(例如,嵌入式位图的存在、"gasp"表的存 在和内容(如在OPENTYPE⑧/TrueType字体文件中))、所请求的任何几何变换 的存在和种类。其它因素可影响对呈现模式的选择。例如,字体的"复杂度"可在 选择呈现模式时考虑。例如,可对相对复杂的字体决定应用BW呈现模式并利用 嵌入式BW位图,并且可对相对较不复杂的字体应用CT呈现模式并完全忽略嵌入 式BW位图。
对呈现模式的选择不必完全实现显示设备的所有可能性。在许多情形中,选 择是由软件作出的,且基于不同呈现模式在不同条件下对人类眼睛更清晰或更不清 晰的一般经验。例如,在低ppem下,AA呈现模式通常提供比BW模式质量低的 呈现,尤其是在字体包含BW嵌入式位图的时候。因此,"gasp"表中的标志可迫 使在呈现低ppem字符时应用BW呈现模式,即使大多数显示设备能够显示灰度阴 影。对于CLEARTYPE⑧也是如此。例如,可能决定在字体中存在嵌入式BW位图 的较低ppem下对相对复杂的字体应用BW呈现模式,即使显示设备具有以CT模 式呈现的能力。所选择的呈现模式应当提供最佳用户体验,并且可以在另一呈现模 式看似能提供更佳的呈现结果时改变。
当前,假定所有其它条件相同,常规粗细度和粗体粗细度字符通常以同一呈 现模式来呈现。然而,这一决定并不反映任何内部要求,并且可在另一方法被示为 能产生更好呈现结果时被盖写。
用于位图加粗的当前算法通常对输入和输出使用相同类型的位图,这意味着 对于加粗算法,呈现模式当前隐含地建立了输入和输出类型。然而,这一依赖性一 般不是必需的。
光栅化过程对于常规和模拟的粗体粗细度经历相同的主要步骤。 一个区别在 于如果应用了一种形式的模拟加粗,则在光栅化过程中使用一额外的加粗步骤。该 加粗步骤如同对于常规粗细度所做的那样截断光栅化流程、执行必要的加粗操作、
然后让光栅化流程完全如常规粗细度情况下一样继续。因此,现在将有对于常规粗 细度的光栅化的某些一般背景描述,使得加粗步骤可在其适当的光栅化上下文中得 到理解。
光栅化器可接受与字体的特定字符或请求的不同呈现条件有关的许多不同参 数。出于描述模拟加粗的常规模型的目的,将集中于给予光栅化器的以下输入信息:
关于所请求的字符的标识的信息(例如,Unicode字符代码)。
关于呈现条件的信息,诸如大小(ppem)、不恒等几何变换的存在、对 模拟加粗的请求等。如果请求了模拟加粗,则标识"厚重度"(加粗量) 和加粗方向的某些额外参数将被传递给光栅化器(以下更详细描述)。
来自字体文件的信息诸如对于特定字符或同一条件下的字符总和是否
存在嵌入式位图、对特定字符的嵌入式位图或/和轮廓数据的描述的访
问、由设计者指定的诸如对特定ppem的优选呈现模式等信息。
关于呈现模式(定义所得位图的格式)的信息对呈现模式BW、 AA或 CT的指定以及任何附加的所需信息(例如,在AA加粗的情况下一所请 求的灰度数目)。
光栅化器将基于输入信息执行适当的光栅化,并且将提供对应于所请求的呈 现模式的格式的所得位图,以及与所得位图的大小和定位有关的度量信息。
由于用于以下较佳实施例的详细描述一节中所描述的加粗模拟的新算法并不 旨在必须修改度量信息,因此现在将描述常规光栅化过程的位图输出。
现在将参考一具体示例并参考

图1来描述用于常规BW呈现的光栅化过程。 在BW呈现模式中,光栅化器通常使用嵌入式BW位图(如果存在)。在图1的 示例中,假定要呈现Unicode "希腊大写字母MU"。如果对该字符和所请求的条 件存在BW位图(在图1中,为分支"(BW:嵌入式BW简单位图)"),则将 嵌入式BW位图用于光栅化。来自光栅化器的BW值然后由光栅化器外部的软件 映射到实际的像素颜色。
如果对于该字符和所请求的条件不存在BW位图(在图1中,为分支"(BW: 轮廓一简单位图)"),则使用字体中存在的轮廓信息,通过向该轮廓应用扫描转 换算法来呈现简单位图。如果存在嵌入式位图则使用该位图的原因是对于未精调字 体,通过呈现轮廓而产生的位图通常具有比嵌入式位图低的质量。
不论使用哪一方法,最终输出具有相同的格式简单BW位图。这一光栅化 过程的一重要特性是它不在最终输出位图的计算的任何中间步骤处使用过縮放的
位图。在计算的所有阶段,对每一像素只有一个值。
现在将参考一具体示例并参考图2A和2B来描述用于常规AA呈现的光栅化 过程。在AA呈现模式中,光栅化器通常在要呈现的字体中使用嵌入式AA位图(如 果存在)(在图2A中,为分支"(AA:嵌入式AA简单位图)")。由于几乎 没有字体具有嵌入式AA位图,因此几乎从不执行分支(AA:嵌入式AA简单位 图)。
另一方面,如果对一字符和所请求的条件不存在嵌入式位图,则使用字体中 存在的轮廓信息来呈现简单AA位图(在图2A中,为分支"(AA:轮廓一过缩 放位图)"),从而在图2B中继续到分支"(AA:过縮放一简单位图)"。当 光栅化从轮廓信息开始时,光栅化通过以下两个独立阶段进行(AA:轮廓一过 縮放位图)和(AA:过縮放一简单位图)。用于在阶段(AA:轮廓一过缩放位图) 期间基于所使用的轮廓数据来计算过縮放位图的算法以及用于在阶段(AA:过縮 放一简单位图)期间计算简单AA位图的最终值的算法并不彼此依赖,并且可独立
修改,只要它们能对所要求的输入和输出格式起作用。
不论使用哪种方法,最终输出具有相同的格式简单AA位图。这一光栅化 过程的一个重要特性是当没有嵌入式AA位图时,光栅化过程使用过縮放的位图作
为最终输出位图的计算的中间结果。
既然已对BW和AA呈现模式中的每一种一般地描述了光栅化过程,该描述 继续到常规的BW和AA加粗算法。取决于输入的类型,用于加粗模拟的算法被 细分成两个大组"位图加粗"和"轮廓加粗"。除了各种加粗参数之外,位图加
粗算法接受位图作为其输入,而轮廓加粗算法接受轮廓作为其输入。位图加粗返回 位图作为其输出,而轮廓加粗返回经修改的轮廓,该轮廓稍后将被扫描转换以产生 位图。
位图和轮廓加粗算法在光栅化过程的不同阶段处应用。轮廓加粗总是在光栅 化过程的第一步之前应用,因为它是对常规粗细度执行的。在执行了轮廓加粗之后, 光栅化完全如同常规粗细度情况下一样继续。
当前,几乎从不应用轮廓加粗。位图加粗在大多数情形中由大多数应用程序 执行,除了向文本应用非平凡几何变换的极少情况之外。应用位图加粗的能力并不 取决于具有嵌入式位图的字符。位图加粗因此可被应用于有或没有嵌入式位图的字 符。如果字符对所请求的条件没有嵌入式位图,则基于轮廓信息的扫描转换结果将 用作位图加粗算法的输入。本发明的原理更适用于位图加粗,因此现在将描述几种
常规的位图加粗算法。
按照定义,位图加粗算法接受位图作为其输入,并返回位图作为其输出。除 了位图本身以外,位图加粗算法通常接受关于加粗的厚重度和方向的信息。该信息 可由分别在水平和垂直方向上的一对"加粗位移"来表达。加粗位移标识了加粗的 位图在视觉上应比原始位图浓密多少量(以像素来表示),并且位移方向显示了加 粗的方向(向右/向左以及向上/向下)。大多数当前的应用程序对仅对应于全部数
目的像素的加粗位移起作用。另外,在低冲ppem以及甚至高ppem的较低范围(例 如,达约50ppem)下,通常应用向右模拟加粗1像素(以及垂直方向上O像素)。
输入位图可源自不同数据(诸如嵌入式位图或字形的轮廓)并且可用不同方 式来计算。计算输入位图的具体方式对于应用于位图的加粗算法是无关的。有关的 是加粗算法期望什么格式的输入位图以及该算法将生成什么格式的输出位图。因 此,将基于输入和输出位图的格式来区分各种加粗算法。
可在光栅化过程的不同步骤应用不同种类的位图加粗算法,因为光栅化过程 的不同步骤对不同格式的位图起作用。然而,当前应用的位图加粗算法通常以简单 位图(BW、 AA或CT格式)开始,且生成与其输入相同格式的简单位图。
大多数当前应用的位图加粗算法对同时作为输入和输出的简单位图起作用, 即使在涉及过縮放位图的计算的光栅化过程期间。如果计算过缩放位图,则在将过 縮放位图转换成简单位图之后应用加粗。
此外,大多数当前应用的位图加粗算法具有与输入位图格式完全相同的输出 位图格式。
此外,这些算法通常打开输入位图中关闭的某些像素或使具有较浅颜色的某 些像素变得更深,并且通常不关闭像素或使像素更浅。
并且,常规算法通常基于输入位图的局部特性,诸如加粗方向上的一个(对 于低/中ppem)或几个相邻像素,来决定是否修改一特定像素的值。当前使用的算 法不使用与加粗垂直的方向上的相邻像素的信息。
此外,常规算法是逐行(对于水平加粗)和逐列(对于垂直加粗)工作的, 且因此这些算法一次仅分析一个方向(要么水平要么垂直)。换言之,所得的像素 值取决于仅该行中或仅该列中的相邻像素,且不考虑二维邻域。
当前应用的位图加粗算法可在水平或垂直方向上应用。用于水平和垂直方向 的算法本质上是对称的,仅是方向性改变。 一般而言,用于水平和垂直加粗的算法 不会混杂。换言之,如果加粗应在两个方向上应用,则首先在一个方向上应用,然
后在另一方向上对第一方向上的加粗结果应用。
此外,除了包含输入位图的矩形像素区域之外,这些算法通常影响与该矩形 区域相邻的一行或几行和/或一列或几列,取决于作为参数接受的加粗位移的值。
对于低冲ppem(即,最大约50ppem),这些算法通常在向右的水平方向上 应用1像素的加粗。注意,低/中ppem恰好是所呈现的图像的质量尤其成问题且特 别需要对现有算法的改进的区域。
如图3A所示,在BW呈现模式中,常规加粗算法接受BW简单位图作为输 入,并生成BW简单位图作为输出。该加粗算法如在常规粗细度的情况(例如, 参见本说明书的图1)下所应用的那样在呈现过程的结束处执行。
特别地,如果对于所请求的条件在字体中存在嵌入式位图(图3A中的"是"), 则将以下也称为"(BW:位图简单常规一位图简单粗体)"的BW加粗算法应用 于以下称为"(BW:嵌入式BW简单位图)"的步骤(见图1的左半部分)的输 出位图。或者,如果对所请求的条件在字体中不存在嵌入式位图(图3A中的"否"), 则如果光栅化基于轮廓数据,在以下称为"(BW:轮廓一简单位图)"的步骤(见 图1的右半部分)之后执行步骤(BW:位图简单常规一位图简单粗体)。
(BW:位图简单常规一位图简单粗体)中对输入和输出位图是BW简单位图 的要求是相当不灵活的。由于这些限制,加粗算法只能打开输出位图中在输入位图 中被关闭(具有值0)的某些像素。
例如,在位图应向右在水平方向上加粗1像素的情况下,此处称为"<BW:
标准算法>"的常用算法运作如下。对于原始位图中的每一行,打开具有"黑色" (即,打开的)直接左邻的所有像素。
图3B和3C中都示出了对该算法的应用的一个示例,其中该算法的输入和输 出被示为在由光栅化器外部的软件映射到黑白颜色之后。如可从图3B中见到的, 算法〈BW:标准算法>执行考虑到限制的完全合理的操作。然而,图3C中的字符 是使用相同的加粗算法来呈现的。如可从图3C中清楚的,该加粗算法使得输出字 符在该字符相对复杂的情况下变得不可识别。
如图4A所示,在AA呈现模式中,常规加粗算法接受AA简单位图作为输入, 并生成AA简单位图作为输出。该加粗算法如同在常规粗细度的情况下应用的那样 等待直到呈现过程的结束。特别地,对于对所请求的条件具有AA位图(图4A中 的"是")的字符的呈现,如步骤(AA:嵌入式AA简单位图)(见图2A的左 半部分)中所表示的那样基于嵌入式AA位图来生成简单AA位图。另一方面,对
于对所请求的条件没有AA位图(图4A中的"否")的字符的呈现,使用步骤(AA:
轮廓一过縮放位图)和(AA:过縮放一简单位图)(见图2A的右半部分),基 于字符的轮廓来生成简单AA位图。在任一情况下,对输出位图应用以下称为
"(AA:位图简单常规一位图简单粗体)"的AA加粗步骤。
以下称为"<AA:标准算法>"的常规AA加粗算法对简单AA位图进行操作, 简单AA位图对每一像素表示过縮放位图中打开的子像素的数目。该算法根据简单
"加性"原理来运作,对相邻像素累加打开的子像素的数目。该算法对像素内的子 像素的确切位置不起作用,而是对关于像素内打开的子像素的数目的累计信息起作 用。
尽管该算法仅对这些累计值起作用,但是结果相当类似于直接对过縮放位图 起作用的最简单算法,该最简单算法将过縮放位图均匀地加粗像素中的子像素数, 这为常规算法提供了合理的调整。然而,问题是对于更复杂的字符,当前算法不产 生清晰的结果。
对于向右加粗l像素,常规的AA加粗算法〈AA:标准算法〉如下
1) 对于原始位图中的每一行,从右到左前进。
2) 对于每一像素
2a)向该像素本身的值加上直接左邻的值。
2b)如果所得的值超过特定格式中允许的最大值,则将该最大值赋予该 像素。
图4B示出了该算法的应用的一个示例。该示例继续以上给出的与对常规粗细 度以AA模式呈现有关的涉及"波浪"字符的示例(图2A和2B中)。
因此,其中甚至是对复杂字符,加粗的字符也更清晰可读的BW和AA模拟 加粗机制将是有利的。
发明简述
本发明的原理涉及用于加粗输入黑白位图的机制和方法。在访问输入黑白位 图之后,模拟加粗使用该输入黑白位图来生成加粗的抗混叠位图,由此与常规的模 拟加粗技术相比改进了加粗的字符的外观和可读性。
本发明的其它实施例将在以下描述中阐明,且部分将从该描述中清楚,或者 可通过对本发明的实践来获知。本发明的实施例可借助所附权利要求书中特别指出 的手段和组合来实现和获得。本发明的这些和其它实施例将从以下描述和所附权利
要求书中变得更完全清楚,或者可通过如下所述对本发明的实践来获知。
附图简述
本专利或申请文件包含以彩色实现的至少一幅图。带有彩色图的本专利或专 利申请公开的副本将由美国专利和商标局在请求且支付了必要的费用之后提供。
为了描述可获得本发明的上述和其它优点和特征的方式,将参考附图中所示 的其具体实施例来呈现以上简要描述的本发明的更具体描述。要理解,这些图仅描
绘了本发明的典型实施例,并且因此不被认为是限制其范围,本发明将通过使用附
图用附加的特征和细节来描述和解释,附图中
图1示出了用于黑白呈现的常规光栅化过程的流程图2A和2B示出了用于抗混叠呈现的常规光栅化过程的流程图3A示出了显示用于常规黑白模拟加粗方法的上下文的流程图3B示出了其中加粗简单字符的常规模拟黑白加粗的第一示例;
图3C示出了其中加粗复杂字符的常规模拟黑白加粗的第二示例;
图4A示出了显示用于常规模拟抗混叠加粗方法的上下文的流程图4B示出了其中加粗简单字符的常规模拟抗混叠加粗的示例;
图5示出了其中可实现本发明的原理的示例计算环境;
图6A示出了要加粗的示例黑白输入位图6B示出了通过常规黑白模拟加粗方法加粗的输出的黑白输入位图,其中具 有黑色左邻像素的所有白色像素被转为黑色;
图6C示出了通过常规模拟加粗方法加粗的输出的黑白输入位图,其中具有黑 色左邻像素的所有白色像素被转为黑色,除非该像素还具有黑色右邻像素;
图7示出了概念上被细分成16个部分的单个像素;
图8A示出了其中三个像素被加亮的示例输入黑白位图8B以扩展视图示出了其中中心像素在概念上被细分成64个分量的图8A 的三个加亮的像素;
图9A示出了示例输入黑白位图9B示出了根据本发明的原理向图9A的输入黑白位图应用模拟加粗方法所 得的加粗的抗混叠输出位图9C示出了根据常规模拟黑白加粗的原理向图9A的输入黑白位图应用模拟 加粗方法所得的加粗的黑白输出位图IO示出了根据本发明的原理的加粗与常规模拟加粗相比的实际结果;
图11A示出了输入的3X3黑白位图11B示出了根据本发明的原理的模拟加粗方法所得的输出的抗混叠位图, 其中在加粗时考虑到垂直上下文信息,并且使用16个分区来表示中心像素; 图12A示出了一个示例输入黑白位图12B示出了根据本发明的原理向图12A的输入位图应用模拟加粗方法,其 中考虑了垂直上下文信息;
图12C示出的与图12B相同,除了输入位图的黑色像素被强调之外; 图12D示出了指出若干特征的图12A的输入位图; 图13示出了在最左边列中显示(加亮)"路径"的示例输入黑白位图; 图14A示出了一个示例输入黑白位图14B示出了图14A的输入黑白位图,其中属于在术语"路径"的一种定义 下定义的路径的像素被加亮;
图14C示出了图14A的输入黑白位图,其中属于在术语"路径"的另一种定 义下定义的若干路径的像素被加亮;
图14D示出了图14A的输入黑白位图,其中属于在术语"路径"的第三种定 义下定义的若干路径的像素被加亮;
图14E示出了图14A的输入黑白位图,其中属于在术语"路径"的第四种定 义下定义的若干路径的像素被加亮;
图15A示出了一个示例输入黑白位图15B示出了带有各自用作路径的两条垂直"腿"的图15A的示例输入黑白
位图16示出了带有被加亮以应用路径平均的两条分开"路径"的图14A的黑白 输入位图17A示出了一个示例输入黑白位图17B示出了从应用于图17A的输入黑白位图的模拟加粗算法的第一阶段所 得并由该算法计算的初始灰度值;
图17C呈现了与图17B完全相同的结果,其中输入图像被加亮;
图17D示出了与图17C相同的输出位图,除了是在应用第一平均方法之后;
图17E示出了与图17C相同的输出位图,除了是在应用第二平均方法之后;
图18是示出用于模拟加粗的上下文的流程图19示出了应用上下文方法以基于上下文信息来分配中间灰度; 图20A示出了 一个示例输入黑白位图20B示出了对图20A的输入黑白位图计算初始加粗量的结果;
图21A示出了一个示例输入黑白位图21B示出了根据本发明的原理在对图21A的输入黑白位图求平均之后进行 加粗的结果;
图22A示出了 一个示例输入黑白位图22B示出了向图22A的输入黑白位图应用常规模拟加粗;
图22C示出了对图22A的黑白位图应用根据本发明的原理的模拟加粗;
图23A示出了一个示例输入黑白位图23B示出了对图23A的黑白位图应用根据本发明的原理的模拟加粗,其中 仅仅没有应用"帽修正";
图23C示出了对图23A的黑白位图应用根据本发明的原理的具有"帽修正" 的模拟加粗;
图24是具有"管"且标识了该管的端点的一个示例输入黑白位图段; 图25是具有管三元组的一个示例输入黑白位图26是具有开口的一个示例输入黑白位图,其中标识了开口的各部分; 图27示出了根据术语帽的定义管长度为1的朝顶部打开的所有可能的帽;以

图28示出了根据术语帽的定义管长度为2的朝顶部打开的所有可能的帽。
较佳实施例的详细描述
本发明的原理涉及甚至是对错综复杂的字符和/或以小磅值显示的字符也充分 改进了加粗字体的清晰性和可读性的改进的模拟加粗机制。该模拟加粗方法从简单 BW位图开始,并得到简单AA加粗位图。
在描述本发明的细节之前,首先将参考图5描述可用于实现本发明的原理的 合适的计算体系结构。在以下描述中,将参考由一个或多个计算机执行的动作和操 作的符号表示来描述本发明,除非另外指明。由此,可以理解,这类动作和操作, 有时称为计算机执行的,包括计算机的处理单元对以结构化形式表示数据的电信号 的操纵。这一操纵转换了数据或在计算机的存储器系统中的位置上维护它,从而以 本领域的技术人员都理解的方式重配置或改变了计算机的操作。维护数据的数据结
构是存储器的物理位置,它具有数据的格式所定义的具体属性。然而,尽管在上述 的上下文环境中描述本发明的原理,但它并不意味着限制,如本领域的技术人员所 理解的,后文所描述的几个动作和操作也可用硬件实现。
转向附图,其中相同的参考标号指代相同的元素,本发明的原理被示为在合 适的计算环境中实现。以下描述基于所示的本发明的实施例,并且不应被认为是对 于此处未明确描述的替换实施例而限制本发明。
图5示出了可用于这些设备的一个示例计算机体系结构的示意图。出于描述 的目的,所描绘的体系结构仅是合适的计算环境的一个示例,且并不旨在暗示关于 本发明的使用范围或功能的任何限制。也不应将该计算系统解释为对于图5中所示 的组件的任一个或其组合有任何依赖性或要求。
本发明的原理可以用众多其它通用或专用计算或通信环境或配置来运作。适 用于本发明的公知的计算系统、环境和配置的示例包括但不限于,移动电话、袖珍 计算机、个人计算机、服务器、多处理器系统、基于微处理器的系统、小型机、大 型计算机以及包括上述系统或设备中的任一个的分布式计算环境。
在其最基本的配置中,计算系统500通常包括至少一个处理单元502和存储 器504。存储器504可以是易失性(如RAM)、非易失性(如ROM、闪存等)或 两者的某一组合。这一最基本配置在图5中由虚线506示出。在本说明书和权利要 求书中,"计算系统"被定义为能够执行软件、固件或微码以实现一功能的任何硬 件组件或硬件组件的组合。计算系统甚至可以是分布式的以实现分布式功能。
存储介质设备可具有另外的特征和功能。例如,它们可包括另外的存储设备 (可移动和/或不可移动),包括但不限于PCMCIA卡、磁盘和光盘以及磁带。这 类另外的存储在图5中由可移动存储508和不可移动存储510示出。计算机存储介 质包括以用于储存如计算机可读指令、数据结构、程序模块或其它数据等信息的任 一方法或技术实现的易失性和非易失性、可移动和不可移动介质。存储器504、可 移动存储508和不可移动存储510都是计算机存储介质的示例。计算机存储介质包 括但不限于,RAM、 ROM、 EEPROM、闪存或其它存储器技术、CD-ROM、数字 多功能盘、其它光存储、磁盒、磁带、磁盘存储、其它磁存储设备、以及可以用来 储存期望的信息并可由计算系统访问的任一其它介质。
如此处所使用的,术语"模块"或"组件"可以指在计算系统上执行的软件 对象或例程。此处所描述的不同组件、模块、引擎和服务可被实现为在计算系统上 执行(例如,作为单独的线程)的对象或进程。尽管此处描述的系统和方法较佳地
用软件来实现,但是用软件和硬件或硬件的实现也是可行且所构想的。
计算系统500也可包含允许主机如通过网络520与其它系统和设备进行通信 的通信信道512。通信信道512是通信介质的示例。通信介质通常以诸如载波或其 它传输机制等已调制数据信号来具体化计算机可读指令、数据结构、程序模块或其 它数据,并包括任一信息传送介质。作为示例而非局限,通信介质包括有线介质, 如有线网络和直接连线连接,以及无线介质,如声学、无线电、红外和其它无线介 质。本发明使用的术语计算机可读介质包括存储介质和通信介质两者。
计算系统500也可具有输入组件514,如键盘、鼠标、输入笔、语音输入组件、 触摸输入设备等等。输出组件516包括屏幕显示器、扬声器、打印机等等,以及用 于驱动它们的呈现模块(通常称为"适配器")。计算系统500可使用输出组件 516和相关联的适配器来呈现由以下描述的加粗技术中的任一种生成的加粗字符。 计算系统500具有电源518。
描述了其中可采用本发明的原理的合适的计算环境之后,现在将描述根据本
发明的原理的模拟加粗方法。该模拟加粗与诸如上述的(<BW:标准算法>)等使 用简单BW位图作为输入的常规加粗算法相比, 一般改进了加粗的字符的质量。 以下描述的模拟加粗方法可成功地应用于字体,而不论是否有嵌入式位图。此外, 用于以下描述的模拟加粗方法的输出图像中所请求的灰度的具体数目是一般性的, 并且可适合任何所请求数目的灰度,尽管以下示出的大多数示例对应于与0, 1, 2,... 16相对应的17个灰度输出。
该模拟加粗方法可在若干一般原理下运作。根据此处称为〈Gen:l〉的第一一般 原理,该方法从作为输入的简单BW常规位图开始,并创建加粗算法的输出作为 AA (而非BW)格式的简单位图。由此,与常规模拟加粗方法不同,该加粗算法 的输入和输出可具有不同的格式。这一灵活性使得加粗方法的输出能够更清晰可 读,因为输出位图不限于每一像素两个二进制值。
例如,考虑图6A,其中要加粗的BW位图受到输出位图也是BW位图的常规 限制。图6A的输入位图具有若干垂直平行笔划,它们彼此相隔l像素。现在假定 存在将该字符向右加粗1像素的请求。常规的"BW—BW"加粗方法可向每一垂 直笔划中的每一黑色像素的右侧添加一黑色像素,从而得到图6B的BW位图。如 可从图6B中见到的,这使该字符的原始设计变得模糊不清,因为所有的垂直笔划 都被合并而没有视觉上的分隔。或者,常规的"BW—BW"加粗方法可将垂直笔 划之间的像素保持为白色,从而得到图6C的BW位图。这将垂直笔划在视觉上保
持原样,但是使得加粗的位图保留了与常规粗细度位图的外观非常相似的视觉外 观,从而阻碍了加粗的目的。
〈Gen:l〉原理扩展了对像素的阴影选择的概率,这在输入位图的元素之间没有 足够空间的情形中是有利的。该原理允许适当的平衡,其中加粗的位图看上去要比 常规位图厚重得多,而同时保留了原始设计。
从"输出"的观点来看,〈Gen:l〉原理允许加粗模拟的AA输出(在这一情况 下也是整个光栅化过程的输出)可以不必从AA位图开始作为起始点。如先前所指 出的,相当少的字体包含嵌入式AA位图。此外,对于常规粗细度且对于低/中ppem, 以AA模式呈现的结果具有远低于以BW模式呈现的结果的质量。因此,原理 〈Gen:l〉意味着加粗模拟方法可以从当前在"AA—AA"加粗方法中使用的质量好 得多的输入位图开始。由于EA字体和具有大量密集/复杂字符的大多数其它字体 通常至少对低/中ppem (大约在范围10-22 ppem中)下的最复杂字符包含嵌入式 BW位图,因此从BW位图开始给出了只要有可能就能使用手动调整的位图设计 (而非从轮廓呈现)的直接且极其重要的优点。
此处称为〈Gen:2〉的第二个一般原理是加粗算法应当避免完全阻挡输入BW 位图的元素之间的白色空间,因为这一阻挡通常会导致如上所述的加粗字符的清晰 性的损失。向输入位图的黑色像素之间的像素赋予较浅的灰度值至少部分地解决了 这一问题。对输入位图的黑色像素之间的新黑色像素赋值可能导致对复杂/密集字 符的原始设计的丢失(全局或局部)。相反,改为赋予灰度值允许输入位图的元素 之间的视觉分隔,并且防止设计完全丢失。
通过赋予灰度来维持输入位图的元素之间的视觉分隔将参考图7来解释。在 AA呈现模式中,从过縮放位图到简单AA位图的常规转换是通过对每一像素的黑 色子像素计数来完成的。换言之,对一特定像素,从该像素中在过縮放位图中为黑 色的部分中获得灰度。例如,如可从图7看到的,对于水平和垂直方向上的过縮放 因子4,每一像素有16个子像素。在图7所示的黑色子像素的配置中,黑色子像 素的数目是9。因此,赋予该像素的灰度将是9/16。
在维持视觉分隔的加粗算法的设计中,像素可在概念上被细分成多个子像素。 设计者然后可想像"子像素"位图应看上去如何以维持输入的简单位图的现有元素 之间的视觉分隔。然后可赋予灰度以反映该像素的概念上的子像素配置。
例如,假定每一像素可被赋予17个灰度(从0到16)之一。现在假定图8A 所示的简单BW输入位图的像素配置要向右加粗1像素。图8B放大了图8A的三
个加亮的像素,并将中间像素细分成多个子像素。为设计较厚重的粗细度,将向该 输入位图的黑色像素的右边添加某些黑色或灰色像素。假定对于图8A的三个加亮 的像素,要通过与一像素的右邻"保持距离"3/8来维持视觉分隔,以防止输入位
图的笔划看上去有碰撞。可以在概念上细分白色加亮像素(见图8B的中心像素),
并想像在视觉元素之间保持距离在过縮放位图中将看上去如何。在这一情况下,中
心像素的5/8应是黑色,这对于最大灰度16将导致等于10的所赋灰度值。
以下示例示出了遵循原理〈Gen:2〉的简单加粗算法如何允许改善呈现结果的 质量。 一个示例加粗算法如下,假定要执行向右1像素的加粗位移。
1)对输入位图的具有黑色左邻的每一白色像素,
la)如果该像素的右邻为白色,则赋予最大灰度(对应于黑色),以及 lb)如果该像素的右邻为黑色,则赋予"中间"灰度(防止使原始位图 的2个黑色像素之间的空间完全变黑)。
这意味着在输入位图的由白色像素隔开的任何两个黑色像素之间"保持大约 1/2像素的视觉距离"。图9A到9C示出了该算法的一种应用。特别地,图9A表 示要加粗的输入BW位图。图9B表示使用刚才描述的算法的加粗的AA位图。参 考图9B,所得的加粗的AA位图并不是完美的。例如,图9B的加粗的AA位图在 笔划(1)的顶部包含"假衬线",并且导致笔划(2)的非常不均匀的外观。然而, 该结果仍比图9C所示的通过〈BW:标准算法〉创建的结果要好得多,图9C的结果 没有维持视觉距离。
图IO示出了在实际大小下对若干复杂字符的呈现结果。第一 (顶部)行呈现 了常规粗细度位图,第二行呈现了根据常规的〈BW:标准算法〉方法加粗的结果,第 三(底部)行呈现了刚才描述的加粗方法的结果。第三行具有比第一行更厚重的视 觉外观(因此提供了加粗),且第三行比第二行要清晰得多,因为通过对设计元素 的视觉分隔很大程度上维持了原始设计。
用于该加粗方法的第三个一般原理将被称为〈Gen:3〉。原理〈Gen:3〉是由一算 法赋予一像素的灰度值对不同的像素可以不同,并且可以基于任何种类的"上下文" 信息来计算,其中"上下文"不必限于基于加粗方向上的直接邻域的信息或任何其 它种类的局部邻域。对输入位图的可变特性的调整进而允许通过维持字符设计的元 素并保持对字符专用的平衡的"厚重度"(局部和全局)来改善所得位图的质量。
上述关于原理〈Gen:2〉的算法实际上是一种简单"上下文"算法,因为它根据 像素的右邻来向像素赋予不同的灰度值。然而,这一算法仅分析加粗方向上的数据
(对于水平方向上的加粗,仅直接左邻和右邻被认为是白色像素的"上下文")。 考虑到二维"上下文"(即,像素在加粗方向和垂直方向这两个方向上的邻 域)的一种算法考虑一个像素的4个邻居(左、右、上、下)。对于水平方向上向 右的加粗位移为l像素的加粗,该算法可应用以下计算以对像素赋予新值-1)对于具有黑色左邻的白色像素 la)如果该像素的右邻为白色
赋予最大灰度值(g卩,将像素着色为黑色) lb)否则(即,如果该像素的右邻为黑色)
将所赋予的最大值减小1/4,
如果该像素的上邻为黑色,则将所赋予的最大值再减少3/16,以及 如果该像素的下邻为黑色,则将所赋予的最大值再减少3/16
该算法不仅考虑水平的视觉分隔,还考虑垂直的视觉分隔。图11A和11B示 出了该算法在3X3的像素阵列的上下文中对单个像素(中心像素)的一种基本应 用。图IIA示出了输入BW位图的输入BW像素配置。图11B示出了直接过縮放 的像素配置。可以如图11B的中心像素所示在概念上将一像素细分成4X4个子像 素。如果该像素具有黑色右邻,则希望将最后(最右边) 一列子像素保持为白色。 另外,如果该像素具有黑色上邻或下邻,则将上一行或下一行子像素保持为白色。 在图11B所示的配置中,中心白色像素将被赋予值9 (假定最大灰度值为16)。
根据这一算法赋予灰度值的一个示例在图12A到12D中示出。图12A对应于 输入位图。图12B示出了使用刚才描述的加粗算法的加粗结果。图12C与图12B 相同,差别仅在于它加亮了在输入位图中为黑色的像素。注意图12C中的封闭区 域的端点处(图12D中的像素(la)禾B (lb))的较高对比度以及对在输入位图 中具有所有黑色邻居的像素(2)的更高的对比度。还要注意与垂直笔划(3)右边 相邻的白色像素中没有一个有黑色右邻,因此所有这些像素都被着色为黑色。
根据"上下文"向子像素赋值的模拟加粗方法不应受到仅考虑一像素的预定 义局部邻域的限制。例如,一种模拟加粗方法可考虑常规位像中的垂直笔划(或 更一般地,与加粗方向垂直的笔划)的长度,和/或可考虑两个笔划从两侧界定的 白色区域的长度,等等。使用涉及输入位图的更宽区域的信息的某些上下文算法将 参考此处称为〈Gen:4〉的第四一般原理来描述,该原理共同表示称为〈Gen:4A〉和 <Gen:4B>的两个子原理。
在第四一般原理的第一子原理〈Gen:4A〉中,"垂直于加粗方向的路径"或"路
径"被定义为一般(但不必完全或连续地)在垂直于加粗方向的方向上的像素序列。
第二子原理〈Gen:4BM吏用了沿"路径"的方向上的平均或平滑。
更精确地,"路径"是会导致其它像素的值作为加粗结果而被修改的像素序
列(而非其值将被修改的像素)。当然,引入这一定义仅仅是为了便于描述,并且
可在不脱离本发明的原理的前提下改变这一定义。
例如,对于图13的输入位图中的像素配置(以及水平方向上的向右加粗),
加亮的像素(图13的左列中的三个像素)可表示"路径",尽管"路径"右边的
像素的值是要修改的像素值。
遵循这一一般概念和原理的算法由两步构成1)计算初始加粗量,以及2)求
平均。第一步导致对像素计算以灰度值表达的加粗量。第一步中的加粗量的计算可
通过任何适当的算法来执行,包括以上参考〈Gen:2〉和〈Gen:3〉所描述的上下文算法。
由于对像素的初始加粗量的计算通常依赖于像素的相对有限的邻域,因此可 以观察到垂直于加粗方向的方向上的突然的不合需要的尖锐变化。例如,见以上参 考一般原理〈Gen:2〉和〈Gen:3〉描述的加粗方法的所得位图。为了平滑这些变化并 避免由加粗引起的不需要的视觉效应,应用第二步求平均。为了保留字符的原始设 计,维持应用于输入位图的每一结构元素的大致均匀的加粗量将是有利的。因此, 求平均"路径"一般沿着某一结构元素将是有利的。然而,对构成"结构元素"的 内容的解释可以广泛变化。此外,由于所呈现的结果是以非常小的尺寸来显示的, 因此离散元素的某些视觉混和和视觉适应无论如何都是通过眼睛来完成的,使得用 于"结构元素"的定义的更精细算法不能得到比简单算法所得到的可区分的更好质 量的呈现结果。
图14B到14E中给出了 "路径"的某些示例,其中加亮了各种"路径"。在 这些示例中,假定加粗要向右进行。图14A表示输入位图,而图14B到14E表示 可从各种"路径"定义中得到的若干加亮的路径示例。这些示例仅示出了可在第二 列中出现的路径。在图14B中,单个"路径"被定义为整个列中的全部黑色像素 (该"路径"可能是不连续的)。因此,图14B的位图的第二列中的所有黑色像 素被加亮,由此表示一条不连续路径。在图14C中,"路径"被定义为连续的垂 直黑色像素序列。由此,在图14C中,在第二列中有两条路径,每一条路径对应 于每一连续的垂直黑色像素序列。在图14D中,"路径"被定义为具有白色右邻 的连续的垂直黑色像素序列,由此定义了第二列中的四条路径。在图14E中,"路
径"被定义为连续的垂直黑色像素序列,只要该路径不与连续的水平黑色像素序列 (水平笔划)相交,且水平序列(水平笔划)的长度至少为3。这得到图14E的第 二列中三条不同的路径。
"路径"不应必定要被定义为一个方向的像素序列。输入位图的"结构元素" 的任何解释都可用作"路径"的定义。例如,取图15A作为输入位图,"几乎垂
直笔划"识别算法可得到由图15B中的两条加亮的像素路径表示的输入位图的两
条"路径"。
如上所述,遵循一般原理〈Gen:4B〉的加粗方法的第二步涉及对由刚才描述的 一般原理〈Gen:4A〉定义的每一路径沿该路径求平均。这一求平均意味着其值由于 对给定路径的加粗而将被修改的所有像素将经历某一求平均算法。对于加粗位移为 l像素的水平方向上的向右加粗,这意味着对每一"路径",将向在输入位图中为 白色且作为形成该路径的像素的直接右邻的所有像素应用求平均。例如,对于图 16的输入位图的第二列中加亮的上方路径,将向第三列中的所有"点线"像素应 用求平均。
求平均本身可根据任何求平均算法来执行。这些求平均算法的示例包括统一 求平均或以不同权重求平均。求平均可沿着整条"路径"或仅对于像素的若干邻居
进行。求平均可以考虑到要求平均的像素的序列中的不连续性,也可以不考虑该不 连续性,等等。
在以下示例中,图17A对应于输入位图。图17B示出了从第一阶段所得并通 过参考〈Gen:3〉所描述的算法计算的初始灰度值。图17C呈现了与图17B完全相同 的结果,其中加亮了输入图像。注意在加粗之后在垂直笔划(1)顶部的"假衬线" 以及笔划(2)的不均匀外观。图17D和17E示出了求平均的结果。在两种情况下, "路径"都被定义为任何连续的垂直黑色像素序列。图17D对应于沿该路径的统 一求平均—注意对字符设计求平均的结果在加粗的位图中比不使用求平均时有更 好的表示。图17E对应于另一求平均方法,它基于对一像素及其2个上邻和2个 下邻的初始灰度以不同的权重求平均来计算该像素的灰度值一该求平均提供了比 图17B中所呈现的总体上平滑得多的结果,同时在较深的区域中维持了某一对比 度。
由于模拟加粗算法使用简单BW位图作为输入,因此它们是在BW模式中的 标准光栅化过程(对于常规粗细度)结束时简单BW位图变为可用(例如,见图 18中的(BW—AA:位图简单常规一位图简单粗体)步骤)之后在光栅化过程中
执行的。不需要对光栅化过程的其它步骤的(主要)修改。然而,取决于光栅化器 的特定实现,可能需要某些细微改变来支持加粗算法的输出的AA格式。例如,光 栅化器可能需要更多存储器分配以便能够返回全灰度值而非仅仅BW 二进制位。
与当前应用的BW模式中的加粗的一个重要差别是该新算法生成AA而非BW 格式的输出位图(根据〈Gen:1〉)。由于加粗是在光栅化过程的最后一个阶段中执 行的,因此输出格式对于光栅化器本身是无关紧要的。然而,呈现引擎应当知晓由 光栅化器生成的所得位图的AA格式,使得它将正确地解释位图并执行位图值到相 应灰度阴影的映射。
现在将描述遵循一般概念和原理〈Gen:l〉、 <Gen:2>、 〈Gen:3〉和〈Gen:4〉的算 法的一特定参数族〈F1〉。除了使得某些概念更具体之外,该算法族描述了特定的 操作次序。现在将描述用于该算法族的一种可能的参数选择(即,该族中的一特定 算法),并且提供该新算法和当前常用的算法之间的比较。
该参数族由以下参数集以及以下操作次序来定义。
在称为〈Fl:Step:l〉的第一步中,对输入位图应用任何种类的预处理算法(不 应用预处理算法是一有效选择)。对预处理算法的选择是应被定义以标识该族中一 特定算法的第一参数〈Fl:Par:l〉。对于当前的算法族,为清楚起见,假定预处理算 法(如果有的话)得到简单BW位图。
在称为〈Fl:Step:2〉的第二步中,计算初始加粗量。〈FlH吏用以下上下文算法 (见〈Gen:3〉),该算法基于一像素的"4相邻邻居"邻域来计算初始加粗量。该 算法类似于参考〈Gen:3〉所描述的算法。再一次,假定加粗位移为1像素的水平方 向上的向右加粗。对于其值应被修改的像素(即,对于具有黑色左邻的像素),计 算"排斥能力(repulsive power)"以保持初始输入位图的结构元素之间的视觉距 离。"排斥能力"的值将按照相对于最大(即,最暗)灰度值要减少加粗像素的多 少(按百分比或按绝对灰度值)暗度(即,要增加多少亮度)来定义。对用于计算 "排斥能力"的特定公式的选择表示参数族的第二个参数<Fl:Par:2>。
在称为〈Fl:Step:3〉的第三步中,定义求平均"路径",并且沿每一求平均"路 径"应用求平均算法(见〈Gen:4"。对求平均"路径"的具体定义以及对求平均 算法的具体选择分别定义了参数族的第三和第四个参数〈Fl:Par:3^[KFl:Par:4〉。 注意,"无求平均"对〈Fl:Par:4〉是一有效选择。
在称为〈Fl:Step:4〉的第四步中,对每一求平均"路径",对沿该"路径"的 所有像素赋予所得的平均值。在称为〈Fl:Step:5〉的第五步中,向所得的AA位图应用任何后处理算法。选 择在〈Fl:Step:5〉中不应用后处理算法是有效的。对具体后处理算法的选择定义了该 参数族的第五个参数〈Fl:Par:5〉。
现在将描述算法族〈F1〉中一具体算法的示例。以下描述的具体算法的参数是 在应用不同参数对上述算法族中的各算法的输出结果进行视觉比较之后选择的。目 标之一是实现结果质量和所应用算法的复杂度之间的平衡。以下描述对参数的具体 选择。
对于第一个算法参数〈Fl:Par:l〉(即,预处理步骤),应用"帽修正(cap correction)"算法(以下描述)。
对于第二个算法参数〈F1 :Par:2>(即,对用于"排斥能力"的特定公式的定义), 该定义如下对于其值应在加粗期间修改的任何像素,如果该像素在加粗方向上具 有黑色邻居一将所赋的最大灰度值减少最大灰度值的4/16,且对于垂直于加粗方向 的方向上的每一黑色邻居,将所赋的最大灰度值另外减少最大灰度值的3/16。
对于加粗位移为1像素的水平方向上的向右加粗,所得的初始加粗算法可被 概括如下
如果像素为白色且其左邻为黑色
如果其右邻为白色
不应用排斥能力;
否则
应用排斥能力4/16,以及 如果上邻为黑色,则再应用3/16,以及 如果下邻为黑色,则再应用3/16
所得的上述示例算法对最初为白色的像素所赋的值对图19中6个不同的像素 配置示出。图19的示例假定17个灰度值(0...16)。通过上述公式计算初始加粗 量的结果在图20A和20B中示出,其中图20A表示输入位图,图20B对应于求平
均之前的加粗结果。
对于第三个算法参数〈Fl:Par:3〉(即,求平均"路径"的定义),"路径"被 定义为垂直于加粗方向的方向上的连续的黑色像素序列。
对于第四个算法参数〈Fl:Par:4〉 (g卩,求平均算法的定义),对沿加粗方向上 的路径侧面的白色像素应用所赋的灰度值的统一求平均。对于加粗位移为1像素的 水平方向上的向右加粗,求平均算法可被定义如下
计算紧靠"路径"中的像素右侧的白色像素(在输入位图中)的数目,设该 数为NumWhite 。
计算总"排斥能力"作为对于沿该"路径"的所有白色像素(在输入位图中) 的"排斥能力"的总和,设该总和为NegTotal。
计算平均值LevelMax-(LevelMax*(NegTotal/NumWhite)),其中LevelMax是灰
度的最大值。
将该平均值赋予沿该"路径"的所有白色像素。
对图21A的原始位图应用初始加粗和这一求平均的结果在图21B中示出(没 有应用"帽修正"的预处理)。
第五个算法参数〈Fl:Par:5〉(即,后处理的标识)标识了没有应用后处理。
刚才描述的具体算法的呈现结果比当前通常对含有大量复杂的、密集的字符 的字体应用的BW加粗算法的呈现结果要清晰得多。例如,图22A示出了输入位 图。根据当前常用的BW加粗算法的加粗结果在图22B中示出。形成强烈对比的 是,根据具体示例〈F1〉算法的加粗结果在图22C中示出。很清楚,图22C的加粗 字符是比图22B更可识别的图22A中的字符的加粗图像。
现在将描述"帽修正"预处理步骤。"帽修正"算法的原因是消除倾斜笔划 之间的接合点中的窄"帽",否则这一"帽"在加粗之后会导致连接的笔划的视觉 不连续性。以下描述和示例示出了用于向右1像素的水平加粗的"帽修正"。可对 其它加粗方向应用对"帽检测"和"帽修正"相同的基本算法。例如,假定图23A 的输入位图要向右加粗1像素。未向图23A的常规图像应用"帽修正"的示例位 图加粗算法(来自族〈F1〉)将导致图23B的加粗位图。图23B的位图看似由两个 分开的笔划(右边的较长,左边的较短)构成,而这些笔划在常规位图中是连接的。 图23B的加粗的位像(带有这一视觉不连续性)可能会被误解释(误读)为 与图23A的常规粗细度位图中所表示的字符完全不同(语义上不同)的字符。"帽 修正"算法标识了倾斜的连接笔划之间的窄接合点,并且防止了加粗的图像中的视
觉不连续性。应用了 "帽修正"的新的加粗算法将得到图23C的位图。
为了描述"帽修正"算法,将使用若干定义。"管"是输入位图中在左右两 侧由黑色像素界定的连续的一列宽的垂直白色像素序列。图24的像素配置中所示
的管示出了在顶部由黑色像素封闭且在底部打开的管。如果行R和列C中的像素 为白色且其左右邻居都是黑色,则对给定列C的行R对应于"管三元组"。对应 于"管三元组"的行的一个示例在图25中示出。
此外,现在将定义"开口"。存在分别沿管的左侧和右侧延伸的两个黑色像 素链(左和右)。左链的黑色像素从管的一端延伸并垂直地延续,只要存在它垂直 连接到(或对角地连接到左边)的另一黑色像素。右链的黑色像素从管的一端延伸 并在与左管相同的方向上垂直地延续,只要存在它垂直连接到(或对角地连接到右 边)的另一黑色像素。"开口"是管外部仍由左和右链界定的区域。如果左和右链 都包含从管的开口端开始计数的至少L个像素,则开口被认为是(至少)长度L。 开口在特定行中的宽度是该特定行的右和左链之间的白色像素的数目。开口的一个 示例在图26中示出。在该示例中,开口长度为3,从长度为2的管的开口延伸。 开口在离顶部的第三行中具有宽度2,在离顶部的第二行中具有宽度3,而在第一 (顶)行中具有宽度4。
"帽"是一 "管"后跟一 "开口"。帽修正算法在满足以下准则时检测到帽。 首先,找到在一垂直端闭合的长度为l或2的管。找到该管的另一端的开口,该开 口在其从管的开口端开始计数的第一行中为至少2像素宽。在接触定义管或开口的 黑色像素(即使是对角地)的开口内部没有找到黑色像素。图27示出了管长度为 1的朝顶部打开的所有可能的"帽"。图28示出了管长度为2的朝顶部打开的所 有可能的帽。
"帽修正"算法操作如下。
1) 在原始常规位图中,检测所有的"帽"(与加粗方向相对应)
2) 对每一 "帽",用预定义的深灰色阴影(在本实现中为黑色)填充其
"管"
因此,刚才描述的模拟加粗方法提供了用于生成原始BW位图的加粗位图的 改进的方法。本发明可以用其它具体形式来实施而不脱离其精神或本质特性。所描 述的实施例被认为在所有方面都仅是说明性而非限制性的。因此,本发明的范围由 所附权利要求书而非以上描述来指示。落入权利要求书的等效技术方案的意义和范 围内的所有改变都包含在其范围之内。
权利要求
1.一种用于加粗输入黑白位图的计算机实现的方法,所述方法包括访问所述输入黑白位图的动作;以及使用所述输入黑白位图来生成加粗的抗混叠位图的动作。
2. 如权利要求1所述的计算机实现的方法,其特征在于,所述使用输入黑白 位图来生成加粗的抗混叠位图的动作对于输出像素中其相应输入像素为白色的至 少一个输出像素包括确定所述相应输入像素的左邻输入像素为黑色的动作; 确定所述相应输入像素的右邻输入像素为黑色的动作;以及 响应于所述确定动作向所述输出像素赋予中间灰度的动作。
3. 如权利要求2所述的计算机实现的方法,其特征在于,所述中间灰度是通 过执行以下动作来赋予的确定所述相应输入像素的上邻输入像素是白色还是黑色的动作;以及 如果所述相应输入像素的上邻输入像素被确定为黑色,赋予比所述上邻输入 像素被确定为白色时所赋予的更浅的中间灰度的动作。
4. 如权利要求3所述的计算机实现的方法,其特征在于,所述中间灰度是通 过执行以下动作来赋予的确定所述相应输入像素的下邻输入像素是白色还是黑色的动作;以及 如果所述相应输入像素的下邻输入像素被确定为黑色,赋予比所述下邻输入 像素被确定为白色时所赋予的更浅的中间灰度的动作。
5. 如权利宴求2所述的计算机实现的方法,其特征在于,所述中间灰度还通 过执行以下动作来赋予确定所述相应输入像素的下邻输入像素是白色还是黑色的动作;以及 如果所述相应输入像素的下邻输入像素被确定为黑色,赋予比所述下邻输入 像素被确定为白色时所赋予的更浅的中间灰度的动作。
6. 如权利要求5所述的计算机实现的方法,其特征在于,所述使用黑白位图来生成加粗的抗混叠位图的动作还包括标识一般在垂直于所述加粗方向的方向上的像素序列的路径的动作,所述加 粗导致包括所述输出像素的其它像素的值由于所述向相应输出像素应用中间灰度 的动作的实现而被加粗;以及应用赋予所述相应输出像素的中间灰度的求平均以生成所述相应输出像素的 最终中间灰度的动作。
7. 如权利要求4所述的计算机实现的方法,其特征在于,所述使用黑白位图 来生成加粗的抗混叠位图的动作还包括标识一般在垂直于所述加粗方向的方向上的像素序列的路径的动作,所述加 粗导致包括所述输出像素的其它像素的值由于所述向相应输出像素应用中间灰度 的动作的实现而被加粗;以及应用赋予所述相应输出像素的中间灰度的求平均以生成所述相应输出像素的 最终中间灰度的动作。
8. 如权利要求3所述的计算机实现的方法,其特征在于,所述使用黑白位图 来生成加粗的抗混叠位图的动作还包括标识一般在垂直于所述加粗方向的方向上的像素序列的路径的动作,所述加 粗导致包括所述输出像素的其它像素的值由于所述向相应输出像素应用中间灰度的动作的实现而被加粗;以及应用赋予所述相应输出像素的中间灰度的求平均以生成所述相应输出像素的 最终中间灰度的动作。
9. 如权利要求2所述的计算机实现的方法,其特征在于,所述使用黑白位图 来生成加粗的抗混叠位图的动作还包括标识一般在垂直于所述加粗方向的方向上的像素序列的路径的动作,所述加 粗导致包括所述输出像素的其它像素的值由于所述向相应输出像素应用中间灰度 的动作的实现而被加粗;以及应用赋予所述相应输出像素的中间灰度的求平均以生成所述相应输出像素的 最终中间灰度的动作。
10. 如权利要求1所述的计算机实现的方法,其特征在于,还包括在显示器上显示所述加粗的抗混叠位图的动作。
11. 如权利要求1所述的计算机实现的方法,其特征在于,所述使用输入黑白位图来生成加粗的抗混叠位图的动作包括确定所述输入位图中的倾斜笔划之间的接合点中与所述加粗方向相对应的至 少一个窄帽的存在的动作;以及向构成所述至少一个窄帽中的每一个的管的输入像素赋予黑色值的动作。
12. —种包括一个或多个其上有计算机可执行指令的计算机可读介质的计算 机程序产品,所述指令在由计算系统的一个或多个处理器执行时使得所述计算系统 执行一种用于加粗输入黑白位图的方法,所述方法包括访问所述输入黑白位图的动作;以及使用所述输入黑白位图来生成加粗的抗混叠位图的动作。
13. 如权利要求12所述的计算机程序产品,其特征在于,所述使用输入黑白位图来生成加粗的抗混叠位图的动作对于输出像素中其相应输入像素为白色的至少一个输出像素包括确定所述相应输入像素的左邻输入像素为黑色的动作; 确定所述相应输入像素的右邻输入像素为黑色的动作;以及 响应于所述确定动作向所述输出像素赋予中间灰度的动作。
14. 如权利要求13所述的计算机程序产品,其特征在于,所述中间灰度是通 过执行以下动作来赋予的-确定所述相应输入像素的上邻输入像素是白色还是黑色的动作;以及 如果所述相应输入像素的上邻输入像素被确定为黑色,赋予比所述上邻输入 像素被确定为白色时所赋予的更浅的中间灰度的动作。
15. 如权利要求14所述的计算机程序产品,其特征在于,所述中间灰度是通 过执行以下动作来赋予的确定所述相应输入像素的下邻输入像素是白色还是黑色的动作;以及 如果所述相应输入像素的下邻输入像素被确定为黑色,赋予比所述下邻输入 像素被确定为白色时所赋予的更浅的中间灰度的动作。
16. 如权利要求15所述的计算机程序产品,其特征在于,所述使用黑白位图 来生成加粗的抗混叠位图的动作还包括标识一般在垂直于所述加粗方向的方向上的像素序列的路径的动作,所述加 粗导致包括所述输出像素的其它像素的值由于所述向相应输出像素应用中间灰度 的动作的实现而被加粗;以及应用赋予所述相应输出像素的中间灰度的求平均以生成所述相应输出像素的 最终中间灰度的动作。
17. 如权利要求14所述的计算机程序产品,其特征在于,所述使用黑白位图 来生成加粗的抗混叠位图的动作还包括标识一般在垂直于所述加粗方向的方向上的像素序列的路径的动作,所述加粗导致包括所述输出像素的其它像素的值由于所述向相应输出像素应用中间灰度 的动作的实现而被加粗;以及应用赋予所述相应输出像素的中间灰度的求平均以生成所述相应输出像素的 最终中间灰度的动作。
18. 如权利要求13所述的计算机程序产品,其特征在于,所述使用黑白位图 来生成加粗的抗混叠位图的动作还包括标识一般在垂直于所述加粗方向的方向上的像素序列的路径的动作,所述加 粗导致包括所述输出像素的其它像素的值由于所述向相应输出像素应用中间灰度的动作的实现而被加粗;以及应用赋予所述相应输出像素的中间灰度的求平均以生成所述相应输出像素的 最终中间灰度的动作。
19. 如权利要求12所述的计算机程序产品,其特征在于,所述方法还包括在显示器上显示所述加粗的抗混叠位图的动作。
20. 如权利要求12所述的计算机程序产品,其特征在于,所述使用输入黑白 位图来生成加粗的抗混叠位图的动作包括确定所述输入位图中的倾斜笔划之间的接合点中与所述加粗方向相对应的至少一个窄帽的存在的动作;以及向构成所述至少一个窄帽中的每一个的管的输入像素赋予黑色值的动作。
全文摘要
一种用于加粗输入黑白位图(9A)来生成加粗的抗混叠位图(9B)的计算机实现的模拟加粗机制。该模拟加粗考虑到关于周围像素的上下文信息而调整加粗方向上的像素的亮度。由于加粗不限于黑白输出位图,且由于加粗考虑到这一上下文信息,因此增强了所得的加粗字符的清晰性和可读性。
文档编号G06K9/44GK101111851SQ200580047652
公开日2008年1月23日 申请日期2005年12月20日 优先权日2004年12月30日
发明者D·L·吉尔格洛, J·吴, J·王, L·陈, M·G·埃尔-盖姆, T·麦特斯科维奇 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1