Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
METHOD AND APPARATUS FOR IMPLEMENTING VECTOR FONT
Document Type and Number:
WIPO Patent Application WO/2012/009872
Kind Code:
A1
Abstract:
A method and an apparatus for implementing a vector font are provided, which are used to solve the problem of excessively large computation expenses in drawing the vector font in prior art. The method comprises: a bitmap region with the equal size as a display region of a reference font is established (S10), and after filling the bitmap region with the complementary color of the reference font color, the reference font is drawed in the bitmap region (S11); an Alpha table with the equal size as the bitmap region is constructed, and the transparency of each pixel point in the bitmap region is recorded in the Alpha table (S12); the Alpha table is zoomed according to a ratio between the size of a destination vector font and the size of the reference font; the destination vector font is drawed in a destination bitmap region according to the transparency of each pixel point in the zoomed Alpha table (S15). The apparatus comprises: a reference font drawing module, an Alpha table constructing module, an Alpha table zooming module and a destination vector font drawing module. Applying the method and the apparatus, storage cost and time cost in drawing the vector font is decreased significantly.

Inventors:
SUN, Fangtao (ZTE Plaza, Keji Road South Hi-Tech Industrial Park, Nansha, Shenzhen Guangdong 7, 518057, CN)
孙方涛 (中国广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦, Guangdong 7, 518057, CN)
DONG, Shufang (ZTE Plaza, Keji Road South Hi-Tech Industrial Park, Nansha, Shenzhen Guangdong 7, 518057, CN)
董淑芳 (中国广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦, Guangdong 7, 518057, CN)
CHEN, Xi (ZTE Plaza, Keji Road South Hi-Tech Industrial Park, Nansha, Shenzhen Guangdong 7, 518057, CN)
Application Number:
CN2010/076719
Publication Date:
January 26, 2012
Filing Date:
September 08, 2010
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
ZTE CORPORATION (ZTE Plaza, Keji Road South Hi-Tech Industrial Park, Nansha, Shenzhen Guangdong 7, 518057, CN)
中兴通讯股份有限公司 (中国广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦, Guangdong 7, 518057, CN)
SUN, Fangtao (ZTE Plaza, Keji Road South Hi-Tech Industrial Park, Nansha, Shenzhen Guangdong 7, 518057, CN)
孙方涛 (中国广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦, Guangdong 7, 518057, CN)
DONG, Shufang (ZTE Plaza, Keji Road South Hi-Tech Industrial Park, Nansha, Shenzhen Guangdong 7, 518057, CN)
董淑芳 (中国广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦, Guangdong 7, 518057, CN)
International Classes:
G09G5/22; G06T11/00
Attorney, Agent or Firm:
CHINA PAT INTELLECTUAL PROPERTY OFFICE (Suite 717, E-Wing Center No. 113 Zhichun Road,Haidian, Beijing 6, 100086, CN)
Download PDF:
Claims:
权利要求书

1、 一种实现矢量字体的方法, 其特征在于, 该方法包括:

步骤 A、 创建与基准字体显示区域相等大小的位图区域, 将所述位图 区域填充为所述基准字体颜色的补色后, 在所述位图区域中绘制所述基准 字体;

步骤 B、 构建与所述位图区域相等大小的阿尔法表, 将所述位图区域 中每个像素点的透明度记录在所述阿尔法表中;

步骤 C、 按照目标矢量字体大小和基准字体大小的比值缩放所述阿尔 法表;

步骤 D、 根据缩放后的阿尔法表中每个像素点的透明度在目标位图区 域中绘制目标矢量字体。

2、 根据权利要求 1所述的方法, 其特征在于, 步骤 B中, 所述将位图 区域中每个像素点的透明度记录在阿尔法表中包括:

将位图区域中颜色等于基准字体颜色的像素点的透明度记录为 255; 将位图区域中颜色等于基准字体颜色补色的像素点的透明度记录为 0; 将位图区域中颜色既不等于基准字体颜色也不等于基准字体颜色的补 色的像素点确定为字体轮廓像素点, 根据字体轮廓像素点颜色、 基准字体 颜色和基准字体颜色的补色确定出字体轮廓像素点的透明度并记录。

3、 根据权利要求 2所述的方法, 其特征在于, 所述确定出字体轮廓像 素点的透明度所釆用的公式为:

= [ ( R3 - R2 ) X 255 ] / ( R1 - R2 )或 α = [ ( G3 - G2 ) 255 ] / ( G1 - G2 )或 α = [ ( Β3 - Β2 ) 255 ] / ( B1 - Β2 );

其中, α为位图区域中字体轮廓像素点的透明度; Rl、 Gl、 B1分别为 基准字体颜色的红色、 绿色及蓝色分量; R2、 G2、 B2分别为基准字体颜色 的补色的红色、 绿色及蓝色分量; R3、 G3、 B3分别为字体轮廓像素点颜色 的红色、 绿色及蓝色分量。

4、 根据权利要求 2所述的方法, 其特征在于, 所述步骤 C中, 缩放所 述阿尔法表包括:

根据目标矢量字体大小和基准字体大小的比值创建缩放后的阿尔法 表;

确定缩放后阿尔法表中每个像素点在原阿尔法表中的对应点, 根据所 述对应点与其周围四点的位置关系和周围四点的透明度合成每个对应点的 透明度, 并根据所述每个对应点的透明度得到缩放后阿尔法表中每个像素 点的透明度。

5、 根据权利要求 4所述的方法, 其特征在于, 所述步骤 D具体包括: 遍历缩放后的阿尔法表中每一像素点的透明度,

若所述像素点的透明度为 0, 则不做任何操作;

若所述像素点的透明度为 255 ,则在目标位图区域中的对应像素点上填 充所述基准字体的颜色;

若所述像素点的透明度介于 0 ~ 255之间, 则按照所述像素点的透明度 合成所述像素点的背景色和字体颜色, 并将合成色填充到目标位图区域中 的对应像素点上。

6、 根据权利要求 1所述的方法, 其特征在于, 所述目标位图区域为单 色填充或任意图案填充。

7、 根据权利要求 1至 6任一项所述的方法, 其特征在于, 所述基准字 体包括字号和风格。

8、 一种实现矢量字体的装置, 其特征在于, 该装置包括:

基准字体绘制模块, 用于创建与基准字体显示区域相等大小的位图区 域, 将所述位图区域填充为所述基准字体颜色的补色后, 在所述位图区域 中绘制所述基准字体; 阿尔法表构建模块, 用于构建与所述位图区域相等大小的阿尔法表, 将所述位图区域中每个像素点的透明度记录在所述阿尔法表中;

阿尔法表缩放模块, 用于按照目标矢量字体大小和基准字体大小的比 值平滑缩放所述阿尔法表;

目标矢量字体绘制模块, 用于根据缩放后的阿尔法表中每个像素点的 透明度在目标位图区域中绘制目标矢量字体。

9、 根据权利要求 8所述的装置, 其特征在于, 所述目标位图区域为单 色填充或任意图案填充。

10、 根据权利要求 8或 9所述的装置, 其特征在于, 所述基准字体包 括字号和风格。

Description:
一种实现矢量字体的方法及装置 技术领域

本发明涉及字体绘制技术, 尤其涉及一种实现矢量字体的方法及装置。 背景技术

现有技术中, 手机上的字体分为点阵字体和矢量字体, 对于点阵字体 而言, 其规格都是固定的, 只能显示其限定的字号, 字体种类少而有限, 每增加一种字体就需要额外消耗不少内存空间 。 一般来说, 点阵字体提供 大中小三种规格,然而三种规格远远满足不了 用户界面( UI, User Interface ) 的显示需求。 但点阵字体有自身的优势, 运算速度非常快, 不依赖字库引 擎, 可以自由的添加字体。 而矢量字体较点阵字体在字体种类上有更大的 改进, 突破了字号的限制, 理论上来说, 可以绘制任意规格的字体, 但实 际上受到字库引擎的影响, 矢量字体的计算开销很大, 其计算开销主要花 费在字体的骨架构建及边缘平滑处理上。 发明内容

本发明提供一种实现矢量字体的方法及装置, 用以解决现有技术中绘 制矢量字体过程中计算开销过大的问题。

本发明所述技术方案如下:

一种实现矢量字体的方法, 该方法包括:

步骤 A、 创建与基准字体显示区域相等大小的位图区域 , 将所述位图 区域填充为所述基准字体颜色的补色后, 在所述位图区域中绘制所述基准 字体;

步骤 B、 构建与所述位图区域相等大小的阿尔法表, 将所述位图区域 中每个像素点的透明度记录在所述阿尔法表中 ;

步骤 C、 按照目标矢量字体大小和基准字体大小的比值 缩放所述阿尔 法表;

步骤 D、 根据缩放后的阿尔法表中每个像素点的透明度 在目标位图区 域中绘制目标矢量字体。

进一步地, 步骤 B中, 所述将位图区域中每个像素点的透明度记录在 阿尔法表中包括:

将位图区域中颜色等于基准字体颜色的像素点 的透明度记录为 255; 将位图区域中颜色等于基准字体颜色补色的像 素点的透明度记录为 0; 将位图区域中颜色既不等于基准字体颜色也不 等于基准字体颜色的补 色的像素点确定为字体轮廓像素点, 根据字体轮廓像素点颜色、 基准字体 颜色和基准字体颜色的补色确定出字体轮廓像 素点的透明度并记录。

进一步地, 所述确定出位图区域中字体轮廓像素点的透明 度所釆用的 公式为:

= [ ( R3 - R2 ) X 255 ] / ( R1 - R2 )或 α = [ ( G3 - G2 ) 255 ] / ( G1 - G2 )或 α = [ ( Β3 - Β2 ) 255 ] / ( B1 - Β2 );

其中, α为位图区域中字体轮廓像素点的透明度; Rl、 Gl、 B1分别为 基准字体颜色的红色、 绿色及蓝色分量; R2、 G2、 B2分别为基准字体颜色 的补色的红色、 绿色及蓝色分量; R3、 G3、 B3分别为字体轮廓像素点颜色 的红色、 绿色及蓝色分量。

进一步地, 所述步骤 C中, 缩放所述阿尔法表包括:

根据目标矢量字体大小和基准字体大小的比值 创建缩放后的阿尔法 表;

确定缩放后阿尔法表中每个像素点在原阿尔法 表中的对应点, 根据所 述对应点与其周围四点的位置关系和周围四点 的透明度合成每个对应点的 透明度, 并根据所述每个对应点的透明度得到缩放后阿 尔法表中每个像素 点的透明度。

进一步地, 所述步骤 D具体包括:

遍历缩放后的阿尔法表中每一像素点的透明度 ,

若所述像素点的透明度为 0 , 则不做任何操作;

若所述像素点的透明度为 255 ,则在目标位图区域中的对应像素点上填 充所述基准字体的颜色;

若所述像素点的透明度介于 0 ~ 255之间, 则按照所述像素点的透明度 合成所述像素点的背景色和字体颜色, 并将合成色填充到目标位图区域中 的对应像素点上。

进一步地, 所述目标位图区域为单色填充或任意图案填充 。

进一步地, 所述基准字体包括字号和风格。

一种实现矢量字体的装置, 该装置包括:

基准字体绘制模块, 用于创建与基准字体显示区域相等大小的位图 区 域, 将所述位图区域填充为所述基准字体颜色的补 色后, 在所述位图区域 中绘制所述基准字体;

阿尔法表构建模块, 用于构建与所述位图区域相等大小的阿尔法表 , 将所述位图区域中每个像素点的透明度记录在 所述阿尔法表中;

阿尔法表缩放模块, 用于按照目标矢量字体大小和基准字体大小的 比 值平滑缩放所述阿尔法表;

目标矢量字体绘制模块, 用于根据缩放后的阿尔法表中每个像素点的 透明度在目标位图区域中绘制目标矢量字体。

进一步地, 所述目标位图区域为单色填充或任意图案填充 。

进一步地, 所述基准字体包括字号和风格。

本发明有益效果如下: 本发明技术方案通过釆用提取基准字体轮廓, 在保持字体风格的条件 下对基准字体轮廓进行阿尔法缩放, 复原变换后的字体以获得预期的目标 矢量字体的技术手段, 显著降低了绘制矢量字体过程中的存储消耗和 时间 开销, 可实现任意规格矢量字体的快速绘制, 使得将一种基准字体快速的 演变成多套字体成为可能。 本发明技术方案同时弥补了点阵字体的不足, 增强了矢量字体的表现手法。

另外, 本发明的字体缩放与现有技术有所区别。 现有技术对字体缩放 时, 需要对字体颜色的 R、 G、 B三个通道分别进行缩放处理, 而本发明将 R、 G、 B三个通道转换成一个阿尔法通道, 仅对阿尔法通道缩放即可。 由 于阿尔法表中 95%以上都是 0和 255这些特殊值, 所以缩放效率更高。 本 发明技术的存储消耗和时间开销为现有技术的 1 /3。 附图说明

图 1为本发明实现矢量字体的方法的实现原理流 图;

图 2为本发明确定缩放后阿尔法表中每个像素点 透明度的示意图; 图 3为本发明在目标位图区域中绘制目标矢量字 的流程图; 图 4为本发明实现矢量字体的装置的结构框图。 具体实施方式

为解决现有技术中绘制矢量字体过程中计算开 销过大的问题, 本发明 通过釆用提取基准字体轮廓, 在保持字体风格的条件下对基准字体轮廓进 行阿尔法缩放, 复原变换后的字体以获得预期的目标矢量字体 的技术手段, 显著降低了绘制矢量字体过程中的存储消耗和 时间开销, 可实现任意规格 矢量字体的快速绘制, 使得将一种基准字体快速的演变成多套字体成 为可 能。

需要强调的是, 本发明变换后的字体和原基准字体具备同种风 格, 比 如将五号宋体变换成四号宋体, 但不能变成四号楷体, 变换过程不改变字 体风格。

下面将结合各个附图对本发明的具体实现过程 予以进一步详细的说 明。

请参阅图 1 , 该图为本发明中实现矢量字体的方法的实现原 理流程图, 其主要包括如下步骤:

步骤 S10、 创建与基准字体显示区域相等大小的位图区域 。

选择一种字体作为基准字体, 基准字体包括字号及风格, 比如选择五 号宋体, 五号是其字号, 宋体是其风格。 根据基准字体的字号计算基准字 体字串的显示区域, 创建和基准字体显示区域相等大小的位图区域 。 之所 以创建位图区域, 是为了提取基准字体的轮廓。

步骤 Sl l、确定基准字体的颜色,将步骤 S10中创建的位图区域填充为 基准字体颜色的补色, 在该位图区域中绘制基准字体。

本步骤中首先需要确定的是基准字体的颜色, 这一点非常关键。 假定 基准字体的颜色为 C1 , 将 C1按照 RGB格式分解得到 R1红、 G1绿、 B1 蓝三个分量, 接着对 C1颜色取补色 C2。 举个例子, 假设 C1为红色(255 , 0, 0 ), 那么其补色 C2是(0, 255 , 255 )。 取得补色 C2后, 将位图区域填 充成基准颜色 C1 的补色 C2。 填充补色是为了让基准字体颜色和背景色形 成最大反差, 从而在提取透明度时能够最大程度的降低误差 。 然后在緩存 的位图区域中绘制基准字体, 从而得到一张有文字的具有单色背景的位图。

步骤 S12、构建与步骤 S10中创建的位图区域相等大小的阿尔法表,将 该位图区域中每个像素点的透明度记录在该阿 尔法表中。

透明度的值区间是 [0, 255]。 遍历位图区域中的每个像素点, 若该像素 点的颜色等于基准字体的颜色 C1 , 则将阿尔法表对应位置的透明度设置为 255 , 表示完全透明。 若该像素点颜色等于基准字体颜色的补色 C2 , 则将 阿尔法表对应位置的透明度设置为 0, 表示完全不透明。 若该像素点的颜色 既不等于 C1 又不等于 C2, 这说明该像素点是位于基准字体轮廓边界上的 字体轮廓像素点, 是一个模糊点, 其透明度介于 0到 255之间。 那么可按 照如下方式计算该点的透明度, 先取得该像素点的颜色 C3, 然后分解 C2 和 C3得到两组分量(R2, G2, B2)和(R3, G3, B3 ), 假定该点透明度 为 α, 那么以下三个公式成立:

Rl X + R2 X ( 255 - ) = R3 x 255 ( 1 )

Gl x + G2 (255 - a ) = G3 x 255 (2 )

Bl x + B2 x (255 - a ) = B3 x 255 (3 )

其中, a为位图区域中字体轮廓像素点的透明度, Rl、 Gl、 Bl分别为 基准字体颜色 CI的红色、 绿色及蓝色分量, R2、 G2、 B2分别为基准字体 颜色的补色 C2的红色、 绿色及蓝色分量, R3、 G3、 B3分别为字体轮廓像 素点颜色 C3的红色、 绿色及蓝色分量。

推导公式(1 )、 (2)、 (3)可得如下变形:

a = [ ( R3 - R2) X 255 ] / ( R1 - R2 ) (4)

a = [ ( G3 - G2) X 255 ] / ( G1 - G2 ) (5)

a=[ (B3 - B2) 255 ]/ (B1 - B2 ) (6)

因为 C1和 C2互为补色, 其分量(Rl, Gl, B1 )和(R2, G2, B2 ) 也互补, 所以 R1不等于 R2, G1不等于 G2, B1不等于 B2。 通过计算, 我 们不难发现(4)、 (5)、 (6)三个公式计算出来的 a是一样的, 在具体实施 中可釆用 (4)、 (5)、 (6) 中任意一个公式计算 a值。 我们将计算所得 a设 置到阿尔法表的对应位置。 当阿尔法表上所有位置的 a值都计算出来, 基 准字体轮廓就出来了, 该轮廓包含了基准字体的风格。 除去字体背景、 字 体实体部分, 字体轮廓所占的像素面积微乎其微, 不足 5%, 所以上述算法 在时间开销上占很小的比重。 步骤 S13、 计算目标矢量字体大小和基准字体大小的比值 。 本发明实施例中将目标矢量字体大小和基准字 体大小的比值定义为字 体规模, 将基准字体规模设置定为 1。 如果目标矢量字体比基准字体大, 那 么其字体规模大于 1 , 如果目标矢量字体比基准字体小, 那么其字体规模小 于 1。 为了计算方便, 通常选取常规字体作为基准字体。

步骤 S14、 按照目标矢量字体的字体规模平滑缩放阿尔法 表。

现有技术对字体缩放时, 需要对字体颜色的 R、 G、 B三个通道分别进 行缩放处理, 而本发明将 R、 G、 B三个通道转换成一个阿尔法通道, 仅对 阿尔法通道缩放即可。 由于阿尔法表中 95%以上都是 0和 255这些特殊值, 所以缩放效率更高。 本发明的存储消耗和时间开销仅为现有技术的 1/3。

阿尔法表反映的是字体的骨架和轮廓, 包括字体边界的平滑处理。 缩 放阿尔法表意味着缩放字体, 如果缩放之后的阿尔法表是平滑的, 那么其 对应的字体也是平滑的。 本发明实施例中首先根据目标矢量字体大小和 基 准字体大小的比值创建缩放后的阿尔法表, 然后确定缩放后阿尔法表中每 个像素点在原阿尔法表中的对应点, 根据所述对应点与其周围四点的位置 关系和周围四点的透明度合成每个对应点的透 明度, 据此得到缩放后阿尔 法表中每个像素点的透明度。

下面通过一实例对缩放阿尔法表的过程予以进 一步说明, 该实例可使 缩放之后的阿尔法表依旧平滑 (无锯齿现象), 具体如下:

按照目标矢量字体的字体规模创建缩放后的阿 尔法表, 那么缩放后的 阿尔法表和原阿尔法表之间可建立一种对应关 系。 缩放后的阿尔法表上的 任意一个像素点均可在阿尔法表上找到一个对 应点。 由于釆用精确计算, 该对应点不一定正好落在像素点上。 如图 2所示, 对应点卩在八、 B、 C、 D四个像素点中的某个位置, P点距离 A和 D的横向距离为 xl , 距离 B和 C的横向 巨离为 x2 , 巨离 A和 B的纵向 巨离为 yl , 巨离 C和 D的纵向 巨 离为 y2。 P点的透明度无论近似取 、 B、 C、 D哪一点的透明度, 都会导 致目标矢量字体的字体轮廓出现锯齿。

为防止目标矢量字体的字体轮廓出现锯齿, 本实例中釆用了如下处理 方式, 先根据 xl和 x2的比例关系合成八和^ D和 C的透明度, 然后将 合成后的两个透明度再根据 yl和 y2的比例关系进一步合成得到 P的透明 度。 4叚设 A、 B、 C、 D、 P的透明度分别为 &、 b、 c、 d、 p, A和 B的合成 透明度是 e, D和 C的合成透明度为 f, 推导如下:

e = ( xl χ b + x2 a ) / 255 (7 )

f = (xl c + x2 d) /255 ( 8 )

p= (yl f+y2 e) / 255 (9 )

将(7)、 (8)代入(9)可得:

p = ( xl x yl x c + x2 x yl x d + xl x y2 x b + x2 x y2 x a ) I 65025 为了提高运算速度, 可用 256替代 255, 将乘除改成移位运算, 那么上 述公式可近似为:

p = ( xl X yl X c + x2 X yl X d + xl X y2 X b + x2 X y2 X a ) » 16 根据以上公式即可算得缩放后的阿尔法表上的 每一像素点的合成透明 度。

步骤 S 15、根据缩放后的阿尔法表中每个像素点的透 度在目标位图区 域中绘制目标矢量字体。

遍历缩放后的阿尔法表上的每一像素点的透明 度, 若该像素点的透明 度为 0, 则在不做任何操作; 若该像素点的透明度为 255, 则在目标位图区 域中的对应像素点上填充基准字体颜色 C1; 若该点透明度介于 0~255之 间, 则按照该像素点的透明度合成该像素点的背景 色和字体颜色, 并将合 成色填充到目标位图区域中的对应像素点上, 至此就完成了字体绘制。 绘 制流程图参考图 3。 图 3的流程包括以下步骤:

步骤 101、 遍历缩放后的阿尔法表上每一像素点的透明度 。

步骤 102、 判断透明度是否等于 255 , 如果是, 则执行步骤 103; 否则, 执行步骤 104。

步骤 103、在目标位图区域对应像素点上填充基准字 体颜色, 结束当前 字体绘制流程。

步骤 104、判断透明度是否等于零,如果是,则结束 当前字体绘制流程; 否则, 执行步骤 105。

步骤 105、 根据透明度在目标位图区域中合成背景色和字 体颜色。

本发明实施例中, 所述目标位图区域为单色填充彩或任意图案填 充。 相应于本发明上述方法, 本发明进而提供了一种实现矢量字体的装置, 请参阅图 4, 该图为本发明中实现矢量字体的装置的结构框 图, 其主要包括 基准字体绘制模块、 阿尔法表构建模块、 阿尔法表缩放模块、 目标矢量字 体绘制模块, 其中各个模块的具体作用如下:

基准字体绘制模块, 用于创建与基准字体显示区域相等大小的位图 区 域, 将该位图区域填充为所述基准字体颜色的补色 后, 在该位图区域中绘 制所述基准字体, 所述基准字体包括字号及风格。

阿尔法表构建模块, 用于构建与所述位图区域相等大小的阿尔法表 , 将所述位图区域中每个像素点的透明度记录在 所述阿尔法表中。

阿尔法表缩放模块, 用于按照目标矢量字体大小和基准字体大小的 比 值平滑缩放所述阿尔法表。

目标矢量字体绘制模块, 用于根据缩放后的阿尔法表中每个像素点的 透明度在目标位图区域中绘制目标矢量字体, 该目标位图区域为单色填充 彩或任意图案填充。

本发明所述装置的具体工作过程请参阅本发明 上述方法中相关内容的 描述, 这里不再给予过多赘述。

以上所述仅为本发明的优选实施例而已, 并不用于限制本发明, 对于 本领域的技术人员来说, 本发明可以有各种更改和变化。 凡在本发明的精 神和原则之内, 所作的任何修改、 等同替换、 改进等, 均应包含在本发明 的保护范围之内。