一种实现字体翻转的方法、装置、设备和存储介质
文献发布时间:2024-04-18 19:58:21
技术领域
本发明涉及计算机中字体显示技术领域,具体涉及一种实现字体翻转的方法、装置、设备和存储介质。
背景技术
电脑系统的图形化界面都会用到字体,使用字体绘制文字的时候,会根据不同效果,由字体引擎对字体进行一些变形,如粗体、翻转等。
目前,实现字体翻转的方法较为单一,比如word中使用的是水平翻转或/和垂直翻转文本框,进而实现字体的翻转。
发明内容
本发明提供一种实现字体翻转的方法。
本发明的技术方案如下:
本发明提供了一种实现字体翻转的方法,包括以下步骤:
判断字体旋转角度是否为预设角度,如果为预设角度,则判断是否能启用位图模式,
如果能启用位图模式,则使用位图模式,计算翻转图像数据区的大小,新建翻转图像数据区,对位图模式图像进行翻转操作,实现对字体的翻转,如果不能启用位图模式,则使用矢量模式,新建翻转矩阵,设置翻转矩阵的xx、xy、yx和yy四个成员变量,通过设置翻转矩阵的四个成员变量的值,实现对字体的翻转;
所述预设角度为0度、或90度、或180度、或270度;
所述字体翻转为字体左右式翻转或/和上下式翻转。
本发明所述使用位图模式,进行翻转操作,具体包括以下步骤:
获取源位图模式图像后,根据公式:翻转图像数据区的大小=源图像数据区行数*源图像数据区步进,计算翻转图像数据区的大小,新建翻转图像数据区,用于存储翻转图像数据,
若字体进行左右式翻转,则对位图模式图像进行左右式翻转操作,若字体进行上下式翻转,则对位图模式图像进行上下式翻转操作,将翻转图像数据区的数据,复制到源位图模式图像数据区。
本发明所述使用位图模式,进行左右式翻转操作,具体包括以下步骤:位图模式图像下,若存在需要继续处理的图像行,则将当前位置的x、y坐标作为源图像数据区x、y坐标,
根据计算公式:目标图像数据区x坐标=源图像数据区宽度-1-x,计算目标图像数据区x坐标,根据计算公式:目标图像数据区y坐标=y,计算目标图像数据区y坐标,将上述坐标作为参数,复制源图像数据区的数据到目标图像数据区后,完成左右式翻转操作。
本发明所述使用位图模式,进行上下式翻转操作,具体包括以下步骤:位图模式图像下,若存在需要继续处理的图像行,则根据计算公式:源图像数据区偏移=源图像数据区步进*y,计算源图像数据区偏移,
根据计算公式:目标图像数据区偏移=源图像数据区步进*(源图像数据区行数-1-y),计算目标图像数据区偏移,
将源图像数据区偏移位置开始的数据,复制到目标图像数据区偏移开始位置,数据数量是源图像数据区步进个字节,完成上下式翻转操作。
本发明所述使用矢量模式,进行翻转操作,具体包括以下步骤:
矢量模式下,新建翻转矩阵,并将所述新建翻转矩阵的xx、xy、yx和yy四个成员变量都设置为0,若字体进行左右式翻转,则翻转矩阵的xx设置为-65536,yy设置为65536,xy、yx均设置为0,使用翻转矩阵进行左右式翻转,若字体进行上下式翻转,则翻转矩阵的xx设置为65536,yy设置为-65536,xy、yx均设置为0,使用翻转矩阵进行左右式翻转。
本发明所述使用位图模式,进行翻转操作,还包括调整插槽位置,使用位图模式,进行左右式翻转操作,若字体位图模式图像需要调整插槽位置,则根据计算公式:目标图像数据区的插槽左边位置=-(源图像数据区宽度+源图像数据区的插槽左边位置),调整插槽位置;
使用位图模式,进行上下式翻转操作,若字体位图模式图像需要调整插槽位置,且源图像数据区行数大于等于源图像数据区的插槽顶部位置,则根据计算公式:目标图像数据区的插槽顶部位置=-源图像数据区的插槽顶部位置+源图像数据区行数,调整插槽位置,若源图像数据区行数小于源图像数据区的插槽顶部位置,则根据计算公式:目标图像数据区的插槽顶部位置=-源图像数据区的插槽顶部位置,调整插槽位置。
本发明所述使用位图模式,进行翻转操作,还包括计算图像结构步进,进行位图像素扩展,具体包括以下步骤:
对位图图像进行像素扩展,设置目标图像结构为字节像素模式,并设置目标图像结构支持的灰度数量为256,若目标图像数据区的像素为位模式,则根据计算公式:目标图像数据区步进=(目标图像数据区宽度+7)/8,计算目标图像数据区步进,
若目标图像数据区的像素不是位模式,则根据计算公式:目标图像数据区步进=目标图像数据区宽度,计算目标图像数据区步进。
本发明还提供了一种实现字体翻转的装置,包括:
位图模式字体翻转模块:使用位图模式,计算翻转图像数据区的大小,新建翻转图像数据区,对字体进行左右式翻转或/和上下式翻转;
矢量模式字体翻转模块:使用矢量模式,新建翻转矩阵,设置翻转矩阵的大小,使用翻转矩阵对字体进行左右式翻转或/和上下式翻转;
位图模式判断模块:用于判断是否成功启用位图模式;
调整插槽信息模块:用于判断并设置位图模式下的插槽位置。
本发明还提供了一种实现字体翻转的设备,包括处理器和存储器,其中,所述处理器执行所述存储器中保存的计算机程序时实现所述的实现字体翻转的方法。
本发明还提供了一种实现字体翻转的存储介质,用于存储计算机程序,其中,所述计算机程序被处理器执行时实现所述的实现字体翻转的方法。
有益效果
本发明提供了一种实现字体翻转的方法,在字体旋转角度为0度、或90度、或180度、或270度时,根据是否启用位图模式,选择相应地模式进行操作,实现字体左右式翻转或/和上下式翻转,从而使字体翻转操作更便捷。另外,在位图模式下进行字体翻转后,还可以设置插槽位置,从而保证字体位图的宽度、高度,与字符的实际宽度、高度保持一致,避免字体位图位置发生错误。
附图说明
图1为字体引擎进行翻转处理的流程示意图,
图2为启用位图模式的流程示意图,
图3为使用位图模式进行左右式翻转操作的流程示意图,
图4为使用位图模式进行上下式翻转操作的流程示意图,
图5为源图像数据区的像素为位模式时,字体引擎把源图像数据区的指定位置的数据复制到目标图像数据区的指定位置的流程示意图。
具体实施方式
专业术语解释:
为描述准确和方便,作出以下约定和说明:
1.相同的术语,不论出现在哪里,含义相同,值也相同。需要计算的值都是指计算结果。
2.字体,每个字体同时包含字体名、字号信息。文中涉及到字体时,不再加以说明。
3.所有跟位置有关的信息,都是从0开始计数。各公式中不再加以说明。
4.位图模式图像:不同字体、不同字号、不同字符的位图模式图像,各不相同。把字体图像作为一个矩形,包含的信息有:图像数据区,width,rows,pitch等。
5.width(宽):表示位图模式图像中,一行的像素个数。
6.rows(行数):表示位图模式图像中,有多少行像素。
7.pitch(步进,步):位图模式图像中,一行像素所占用的字节数。
8.x:x坐标,表示处理位图模式图像的一行像素时,当前正在处理的位置。
x大于等于0,小于width。
9.y:y坐标,表示处理位图模式图像时,当前正在处理的行号。y大于等于0,小于rows。
10.top:插槽的顶部位置。
11.left:插槽的左边位置。
12.Src:凡是有Src后缀的文字,都表示是源图像的信息。如xSrc,表示源图像的x坐标。
13.Dest:凡是有Dest后缀的文字,都表示是目标图像的信息。如widthDest,表示目标图像的宽度。
14.L2R:左右式翻转属性。
15.T2B:上下式翻转属性。
16.数据区:仅包含具体数据,不包含数据的结构和描述。
17.图像结构:包含width、rows、pitch和数据区。
18.字体和字体文件:同样的文字(或字符),使用不同的字体绘制,就会呈现不同的样子。而字体信息都是保存在文件中,称为字体文件。
19.字体引擎:字体引擎加载一个字体文件后,就可以获取字体的图像来绘制字符了;同时,字体引擎还会处理一些效果,如粗体、斜体、翻转等。
字体引擎可以根据需要,启用一个字符的位图模式或矢量模式。
20.矢量模式:又称向量模式,每个字型是通过数学曲线来描述的,可以进行方便的变形,如缩放、翻转等。
21.位图模式:每个字符的信息都是像素图像,不同字号的图像也不同。由描述可知,一个文字,同字体同字号,矢量模式和位图模式的实际显示效果会有所差异。
22.像素扩展。字体位图模式图像中的像素通常是一个bit。为了需要,可以扩充为byte,图像数据区也相应的扩大。
23.灰度数量。位图模式图像的像素,如果是一个bit,只能表示2种灰度;
如果是一个byte,则能表示256种灰度。
位图模式图像数据区,一般来说,一个bit代表一个像素。
24.插槽(Slot),包含位图的位置信息:top和left。
本发明提供了一种实现字体翻转的方法,如图1所示,包括以下步骤:
判断字体旋转角度是否为预设角度,如果为预设角度0度、或90度、或180度、或270度,则判断是否能启用位图模式,
如果能启用位图模式,则使用位图模式,计算翻转图像数据区的大小,新建翻转图像数据区,对位图模式图像进行左右式翻转或/和上下式翻转,实现对字体的左右式翻转或/和上下式翻转,
如果不能启用位图模式,则使用矢量模式,新建翻转矩阵,设置翻转矩阵的xx、xy、yx和yy四个成员变量,通过设置翻转矩阵的四个成员变量的值,实现对字体的左右式翻转或/和上下式翻转,
如果字体旋转角度不是预设角度,则使用常规操作进行翻转操作,比如word中使用的是水平翻转或/和垂直翻转文本框,进而实现文本框中字体的翻转;
进一步地,所述启用位图模式,需要考虑位图模式下字体的选择角度、字体限制、字号限制,如图2所示,具体包括以下步骤:
在字体允许位图模式的情况下,如果当前字体旋转角度为0度、或90度、或180度、或270度,则启用位图模式,
在启用位图模式下,若限制了字体,则获取设置的字体名组,若当前字体名在设置的字体名组之内,则判断是否限制了字号,
若限制了字号,则获取设置的字体号组,若当前字号在设置的字体号组之内,则使用位图模式加载该字符的字体图像。
具体操作如下:
步骤1、开始。
步骤2、判断是否允许位图模式。是,转步骤3;否,转步骤12。
步骤3、判断当前旋转角度是否可以启用位图模式。是,转步骤4;否,转步骤12。判断条件,角度是以下几个角度之一:0度、90度、180度、
270度。
步骤4、判断启用位图模式,是否限定了字体。是,转步骤5;否,转步骤7。
步骤5、获取设置的字体名组。
步骤6、判断当前字体名是否在设置的字体名组之内。是,转步骤7;否,
转步骤12。
步骤7、判断启用位图模式,是否限定了字号。是,转步骤8;否,转步骤10。
步骤8、获取设置的字体号组。
步骤9、判断当前字号是否在设置的字体号组之内。是,转步骤10;否,
转步骤12。
步骤10、使用位图模式加载该字符的字体图像。
步骤11、位图模式为真。转步骤14。
步骤12、使用矢量模式加载该字符的字体图像。
步骤13、位图模式为假。
步骤14、结束。
进一步地,所述使用矢量模式,进行翻转操作,需要利用翻转矩阵来实现,具体包括以下步骤:
矢量模式下,新建翻转矩阵,并将所述新建翻转矩阵的xx、xy、yx和yy四个成员变量都设置为0,若字体进行左右式翻转,则翻转矩阵的xx设置为-65536,yy设置为65536,xy、yx均设置为0,使用翻转矩阵进行左右式翻转,
若字体进行上下式翻转,则翻转矩阵的xx设置为65536,yy设置为-65536,xy、yx均设置为0,使用翻转矩阵进行左右式翻转。
具体操作如下:
步骤1、开始。
步骤2、新建翻转矩阵。xx/xy/yx/yy四个成员变量都设置为0。
步骤3、判断是否需要进行左右式翻转。是,转步骤4;否,转步骤6。
步骤4、设置翻转矩阵。xx设置为-65536,yy设置为65536。
步骤5、使用翻转矩阵,进行左右式翻转。
步骤6、判断是否需要进行上下式翻转。是,转步骤7;否,转步骤9。
步骤7、设置翻转矩阵。xx设置为65536,yy设置为-65536。
步骤8、使用翻转矩阵,进行上下翻转。
步骤9、结束。
进一步地,所述使用位图模式,进行翻转操作,需要计算翻转图像数据区的大小,再利用新建翻转图像数据区来实现翻转,具体包括以下步骤:
获取源位图模式图像后,根据公式:翻转图像数据区的大小=源图像数据区行数*源图像数据区步进,计算翻转图像数据区的大小,新建翻转图像数据区,用于存储翻转图像数据,
若字体进行左右式翻转,则对位图模式图像进行左右式翻转操作,
若字体进行上下式翻转,则对位图模式图像进行上下式翻转操作,
将翻转图像数据区的数据,复制到源位图模式图像数据区。
具体操作如下:
步骤1、开始。
步骤2、获取源位图模式图像。
步骤3、计算翻转图像数据区的大小。公式是:sizeDest=rowsSrc*pitchSrc。
步骤4、新建翻转图像数据区,大小是sizeDest。
步骤5、判断是否需要进行左右式翻转。是,转步骤6;否,转步骤7。
步骤6、对位图模式图像进行左右式翻转操作。
步骤7、判断是否需要进行上下式翻转。是,转步骤8;否,转步骤9。
步骤8、对位图模式图像进行上下式翻转操作。
步骤9、把翻转图像数据区的数据,复制到源位图模式图像数据区。
步骤10、释放翻转图像数据区。
步骤11、结束。
进一步地,所述使用位图模式,进行左右式翻转操作,需要计算源图像数据区的数据和目标图像数据区的数据,并且根据需要调整插槽位置,如图3所示,具体包括以下步骤:
位图模式图像下,若存在需要继续处理的图像行,且图像当前行需要继续处理,则根据计算公式:源图像数据区x坐标=x,计算源图像数据区x坐标,根据计算公式:源图像数据区y坐标=y,计算源图像数据区y坐标,根据计算公式:目标图像数据区x坐标=源图像数据区宽度-1-x,计算目标图像数据区x坐标,根据计算公式:目标图像数据区y坐标=y,计算目标图像数据区y坐标,
将上述坐标作为参数,复制源图像数据区的数据到目标图像数据区后,完成左右式翻转操作,若字体位图模式图像需要调整插槽位置,则根据计算公式:目标图像数据区的插槽左边位置=-(源图像数据区宽度+源图像数据区的插槽左边位置),调整插槽位置。
具体操作如下:
步骤1、开始。
步骤2、判断是否还有需要处理的图像行。是,转步骤3;否,转步骤9。
步骤3、判断图像当前行是否继续处理。是,转步骤4;否,转步骤2。
步骤4、计算源图像数据区x坐标xSrc。计算公式是:xSrc=x。
步骤5、计算源图像数据区y坐标ySrc。计算公式是:ySrc=y。
步骤6、计算目标图像数据区x坐标xDest。计算公式是:xDest=widthSrc
-1-x。
步骤7、计算目标图像数据区y坐标yDest。计算公式是:yDest=y。
步骤8、把上述坐标作为参数,复制源图像数据区的数据到目标图像数据区。转步骤3。
步骤9、判断是否需要调整插槽信息。是,转步骤10;否,转步骤11。
步骤10、调整插槽信息。计算公式:leftDest=-(widthSrc+leftSrc)。
步骤11、结束。
进一步地,所述复制源图像数据区的数据到目标图像数据区,需要根据源图像数据区的像素是否为位模式,选择相应地操作。若源图像数据区的像素为位像素模式,则根据计算公式:byteSrc=ySrc*pitchSrc+xSrc/8计算源图像数据区的字节位置,根据计算公式:bitSrc=取模(xSrc,8)计算源图像数据区的位位置,根据所计算的源图像数据区的字节位置和源图像数据区的位位置,从源图像数据区中取得对应位置的值,如果所取源值大于0且目标像素模式为位像素模式,则根据计算公式:byteDest=yDest*pitchDest+xDest/8,计算目标图像数据区的字节位置,根据计算公式:bitDest=取模(xDest,8),计算目标图像数据区的位位置;如果所取源值大于0但目标像素模式不是位像素模式,则根据计算公式:byteDest=yDest*pitchDest+xDest,计算目标图像数据区的字节位置后,根据目标图像数据区的字节位置,把目标图像数据区对应位置设置为255。如图5所示,具体操作如下:
步骤1、开始。
步骤2、计算源图像数据区的byte位置byteSrc。计算公式是:
byteSrc=ySrc*pitchSrc+xSrc/8。
步骤3、计算源图像数据区的bit位置bitSrc。计算公式是:bitSrc=取模(xSrc,8)。
步骤4、根据byteSrc和bitSrc,从源图像数据区中取得对应位置的值。
步骤5、判断所取源值是否大于0。是,转步骤6;否,转步骤12。
步骤6、判断目标像素模式是否为位像素模式。是,转步骤7,否,转步骤10。
步骤7、计算目标图像数据区的byte位置byteDest。计算公式是:
byteDest=yDest*pitchDest+xDest/8。
步骤8、计算目标图像数据区的bit位置bitDest。计算公式是:bitDest=取模(xDest,8)。
步骤9、根据byteDest和bitDest,把目标图像数据区对应位置设置为所取源值。转步骤12。
步骤10、计算byteDest。计算公式是:byteDest=yDest*pitchDest+xDest。
步骤11、根据byteDest,把目标图像数据区对应位置设置为255。
步骤12、结束。
若源图像数据区的像素为字节模式,则根据计算公式:byteSrc=ySrc*pitchSrc+xSrc计算源图像数据区的字节位置,根据源图像数据区的字节位置,从源图像数据区中取得对应位置的值,如果所取源值大于0,则根据计算公式:byteDest=yDest*pitchDest+xDest计算目标图像数据区的字节位置,根据目标图像数据区的字节位置,把目标图像数据区对应位置的值设置为所取源值。具体操作如下:
步骤1、开始。
步骤2、计算源图像数据区的byte位置byteSrc。计算公式是:
byteSrc=ySrc*pitchSrc+xSrc。
步骤3、根据byteSrc,从源图像数据区中取得对应位置的值。
步骤4、判断所取源值是否大于0。是,转步骤5;否,转步骤7。
步骤5、计算目标图像数据区的byte位置byteDest。计算公式是:byteDest=
yDest*pitchDest+xDest。
步骤6、根据byteDest,把目标图像数据区对应位置的值为所取源值。
步骤7、结束。
进一步地,所述使用位图模式,进行上下式翻转操作,需要计算源图像数据区偏移和目标图像数据区偏移,并且根据需要调整插槽位置,如图4所示,具体包括以下步骤:
位图模式图像下,若存在需要继续处理的图像行,则根据计算公式:源图像数据区偏移=源图像数据区步进*y,计算源图像数据区偏移,根据计算公式:目标图像数据区偏移=源图像数据区步进*(源图像数据区行数-1-y),计算目标图像数据区偏移,
将源图像数据区偏移位置开始的数据,复制到目标图像数据区偏移开始位置,数据数量是源图像数据区步进个字节,完成上下式翻转操作,若字体位图模式图像需要调整插槽位置,且源图像数据区行数大于等于源图像数据区的插槽顶部位置,则根据计算公式:目标图像数据区的插槽顶部位置=-源图像数据区的插槽顶部位置+源图像数据区行数,调整插槽位置,若源图像数据区行数小于源图像数据区的插槽顶部位置,则根据计算公式:目标图像数据区的插槽顶部位置=-源图像数据区的插槽顶部位置,调整插槽位置。
具体操作如下:
步骤1、开始。
步骤2、判断是否还有需要处理的图像行。是,转步骤3;否,转步骤6。
步骤3、计算源图像数据区偏移offsetSrc。计算公式是:offsetSrc=pitchSrc
*y。
步骤4、计算目标图像数据区偏移offsetDest。计算公式是:offsetDest=
pitchSrc*(rowsSrc-1-y)。
步骤5、将源图像数据区offsetSrc位置开始的数据,复制到目标图像数据区offsetDest开始位置,数量是pitchSrc个字节。
步骤6、判断是否需要调整插槽信息。是,转步骤7;否,转步骤10。
步骤7、判断rowsSrc是否大于等于topSrc。是,转步骤8;否,转步骤9。
步骤8、调整插槽信息,转步骤10。计算公式:topDest=-topSrc+rowsSrc。
转步骤10。
步骤9、调整插槽信息。计算公式:topDest=-topSrc。
步骤10、结束。
进一步地,所述使用位图模式,进行翻转操作,还包括计算图像结构步进,进行位图像素扩展,以满足图像尺寸要求,具体包括以下步骤:
对位图图像进行像素扩展,设置目标图像结构为字节像素模式,并设置目标图像结构支持的灰度数量为256,若目标图像数据区的像素为位模式,则根据计算公式:目标图像数据区步进=(目标图像数据区宽度+7)/8,计算目标图像数据区步进,
若目标图像数据区的像素不是位模式,则根据计算公式:目标图像数据区步进=目标图像数据区宽度,计算目标图像数据区步进。
具体操作如下:
步骤1、开始。
步骤2、判断是否需要进行像素扩展。是,转步骤3;否,转步骤5。
步骤3、设置目标图像结构为字节像素模式。
步骤4、设置目标图像结构支持的灰度数量为256。
步骤5、判断目标图像数据区的像素是否是位模式。是,转步骤6;否,转步骤7。
步骤6、计算pitchDest。计算公式是:pitchDest=(widthDest+7)/8。转步骤8。
步骤7、计算pitchDest。计算公式是:pitchDest=widthDest。
步骤8、结束。
本发明还提供了一种实现字体翻转的装置,包括:
位图模式字体翻转模块:使用位图模式,计算翻转图像数据区的大小,新建翻转图像数据区,对字体进行左右式翻转或/和上下式翻转;
矢量模式字体翻转模块:使用矢量模式,新建翻转矩阵,设置翻转矩阵的大小,使用翻转矩阵对字体进行左右式翻转或/和上下式翻转;
位图模式判断模块:用于判断是否成功启用位图模式;
调整插槽信息模块:用于判断并设置位图模式下的插槽位置。
本发明还提供了一种实现字体翻转的设备,包括处理器和存储器,其中,所述处理器执行所述存储器中保存的计算机程序时实现所述的实现字体翻转的方法。
本发明还提供了一种实现字体翻转的存储介质,用于存储计算机程序,其中,所述计算机程序被处理器执行时实现所述的实现字体翻转的方法。
- 一种字体转换的方法、装置、设备及计算机可读存储介质
- 一种应用功能实现方法、装置、设备和存储介质
- 一种后端存储设备的管理方法、装置、设备以及存储介质
- 一种数据存储方法及装置、一种计算设备及存储介质
- 一种数据存储方法及装置、一种计算设备及存储介质
- 位图字体实现方法、装置、电子设备及存储介质
- 一种手写字体去除的方法、装置、电子设备和存储介质