本技术涉及计算机中字体显示,特别涉及一种实现字体斜体效果的方法及系统。
背景技术:
1、电脑系统的图形化界面,都用到字体。通过字体引擎加载字体后,即可以使用字体进行绘制。使用字体绘制文字的时候,会根据不同设置,由字体引擎进行一些变形,如粗体、斜体、旋转等。
2、不同的字体引擎,在实现字体的各种处理上,有不同的实现方式。经常使用的字体引擎,在处理斜体时,往往只能有一种倾斜角度和一个倾斜方向,无法实现倾斜角度和倾斜方向的随意设置。
技术实现思路
1、本发明提供了一种可以设置字体倾斜角度和倾斜方向的实现字体斜体效果的方法。
2、本技术的技术方案如下:
3、一种实现字体斜体效果的方法,包括以下步骤:
4、判断字体旋转角度是否为预设角度,如果为预设角度,则判断是否能启用位图模式,
5、如果能启用位图模式,则根据字体的倾斜幅度,使用横向斜体操作或者竖向斜体操作,实现字体斜体效果,
6、如果不能启用位图模式,则使用矢量斜体操作,实现字体斜体效果。
7、所述的使用横向斜体操作,实现字体斜体效果,具体包括以下步骤:
8、初始化横向目标对象后,计算插槽横向偏移,
9、如果是顺时针方式斜体,根据公式顺时针方式斜体横向移动值=四舍五入取整((源图像的插槽顶部位置-源图像y坐标)*倾斜幅度绝对值)+横向插槽偏移,计算顺时针方式斜体横向移动值,
10、如果是逆时针方式斜体,则根据计算公式逆时针方式斜体横向移动值=视图倾斜值-顺时针方式斜体横向移动值,计算逆时针方式斜体横向移动值,计算目标图像数据区x坐标为源图像数据区x坐标+顺时针方式斜体横向移动值或逆时针方式斜体横向移动值,目标图像数据区y坐标为源图像数据区y坐标;
11、所述的使用竖向斜体操作,实现字体斜体效果,具体包括以下步骤:
12、初始化竖向目标对象后,计算插槽竖向偏移,
13、如果是顺时针方式斜体,根据公式顺时针方式斜体竖向移动值=四舍五入取整((源图像x坐标+源图像的插槽左边位置)*倾斜幅度绝对值)-竖向插槽偏移,顺时针方式斜体竖向移动值,
14、如果字体是逆时针方式斜体,则根据计算公式逆时针方式斜体竖向移动值=视图倾斜值-顺时针方式斜体竖向移动值,计算逆时针方式斜体竖向移动值,计算目标图像数据区x坐标为源图像数据区x坐标,目标图像数据区y坐标=源图像数据区y坐标+顺时针方式斜体竖向移动值或逆时针方式斜体竖向移动值。
15、所述的初始化横向目标对象,包括以下步骤:
16、计算横向视图高度、视图倾斜值、目标图像宽度、目标图像行数、目标图像步进、横向目标图像数据区大小、建立横向目标图像数据区;
17、所述的初始化竖向目标对象,包括以下步骤:
18、计算竖向视图宽度、视图倾斜值、目标图像宽度、目标图像行数、目标图像步进、竖向目标图像数据区大小、建立竖向目标图像数据区。
19、所述的计算横向视图高度,包括以下步骤:
20、根据计算公式:横向视图高度=源图像的插槽顶部位置,计算横向视图高度,若横向视图高度大于等于0,且源图像行数大于横向视图高度,则根据计算公式:横向视图高度=源图像行数,重新计算横向视图高度,
21、若横向视图高度小于0,则横向视图高度取反后作为新的横向视图高度;
22、所述的计算竖向视图宽度,包括以下步骤:
23、根据计算公式:竖向视图宽度=源图像的插槽左边位置,计算竖向视图宽度,若竖向视图宽度大于等于0,且源图像的宽度大于竖向视图宽度,则根据计算公式:竖向视图宽度=源图像的宽度,重新计算竖向视图宽度,
24、若竖向视图宽度小于0,则竖向视图宽度取反后作为新的竖向视图宽度。
25、所述的计算插槽横向偏移,包括以下步骤:
26、根据计算公式:目标图像的插槽顶部位置=源图像的插槽顶部位置,计算目标图像的插槽顶部位置,若字体旋转角度是90度且文字的排列方向不是从上到下,或旋转角度为180度,则目标图像的插槽顶部位置取反,若源图像行数大于目标图像的插槽顶部位置,则根据计算公式:四舍五入取整(倾斜幅度绝对值*(源图像行数-源图像插槽的顶部位置)),计算插槽横向偏移;
27、若源图像行数不大于目标图像的插槽顶部位置,当前旋转角度为180度,则根据计算公式:四舍五入取整(倾斜幅度绝对值*目标图像的插槽顶部位置),计算插槽横向偏移,
28、若源图像行数不大于目标图像的插槽顶部位置,当前旋转角度非180度,则插槽横向偏移为0。
29、所述的计算插槽竖向偏移,包括以下步骤:
30、根据计算公式:目标图像的插槽左边位置=源图像的插槽左边位置,计算目标图像的插槽左边位置,若字体旋转角度是180度或270度,则目标图像的插槽左边位置取反,
31、若源图像的宽度大于目标图像的插槽左边位置,根据计算公式:目标图像的插槽左边位置=源图像的宽度,计算目标图像的插槽左边位置,
32、若源图像的宽度不大于目标图像的插槽左边位置,若旋转角度是90度,或旋转角度是270度,或旋转角度是0度且文字的排列方向是从上到下,或旋转角度是180度且文字的排列方向是从上到下,则根据计算公式:插槽竖向偏移=四舍五入取整(倾斜幅度绝对值*源图像的插槽左边位置)计算插槽竖向偏移,若否,如果源图像的宽度大于源图像的插槽左边位置,则根据计算公式:插槽竖向偏移=四舍五入取整(倾斜幅度绝对值*目标图像的插槽左边位置)计算插槽竖向偏移,如果源图像的宽度不大于源图像的插槽左边位置,则插槽竖向偏移为0。
33、所述的横向斜体操作实现斜体效果,还包括调整插槽横向信息,包括以下步骤:
34、如果为逆时针方式斜体,且插槽横向偏移大于0,则根据计算公式:新插槽横向偏移=视图倾斜值-插槽横向偏移,重新计算插槽横向偏移;
35、如果为逆时针方式斜体,且插槽横向偏移不大于0,则根据计算公式:新插槽横向偏移=视图倾斜值+插槽横向偏移,重新计算插槽横向偏移;
36、如果插槽横向偏移不等于0,或者为顺时针方式斜体且插槽横向偏移不等于0,则根据计算公式:目标图像的插槽左边位置=源图像的插槽左边位置-插槽横向偏移,调整插槽横向信息。
37、所述的竖向斜体操作实现斜体效果,还包括调整插槽竖向信息,包括以下步骤:
38、如果倾斜方式为逆时针,若旋转角度是90度且文字的排列方向不是从上到下,或旋转角度是0度且文字的排列方向是从上到下,或旋转角度是270度,则根据计算公式:新插槽竖向偏移=-(视图倾斜值+插槽竖向偏移),重新计算插槽竖向偏移,
39、若不符合旋转角度是90度且文字的排列方向不是从上到下、旋转角度是0度且文字的排列方向是从上到下、旋转角度是270度,如果插槽竖向偏移大于0,则根据计算公式:新插槽竖向偏移=视图倾斜值-插槽竖向偏移,重新计算插槽竖向偏移,如果插槽竖向偏移不大于0,则根据计算公式:新插槽竖向偏移=视图倾斜值+插槽竖向偏移,重新计算插槽竖向偏移;
40、若插槽竖向偏移不等于0,或倾斜方式为顺时针,则根据计算公式:目标图像的插槽顶部位置=源图像的插槽顶部位置-插槽竖向偏移,调整插槽竖向信息。
41、所述的矢量斜体操作实现斜体效果,包括以下步骤:
42、根据计算公式:坐标倾斜值=65536*倾斜幅度,计算矢量模式下变形矩阵的坐标倾斜值,新建变形矩阵,初始化变形矩阵,设置xx/xy/yx/yy四个成员变量分别为65536、0、0、65536,
43、如果字体旋转角度为0度且有文字的排列方向是从上到下的属性,或字体旋转角度为180度且有文字的排列方向是从上到下的属性,或字体旋转角度为90度且无文字的排列方向是从上到下的属性,或字体旋转角度为270度且无文字的排列方向是从上到下的属性,则变形矩阵的类型为第一类矩阵,坐标倾斜值取负后,设置变形矩阵的yx成员变量值为坐标倾斜值,使用变形矩阵,进行矢量斜体操作实现斜体效果;
44、如果变形矩阵非第一类矩阵,则设置变形矩阵的xy成员变量值为坐标倾斜值,然后使用变形矩阵,进行矢量斜体操作实现斜体效果。
45、一种实现字体斜体效果的系统,其特征在于包括:
46、字体旋转角度判断模块:用于判断字体旋转角度是否为预设角度,如果为预设角度,则判断是否能启用位图模式;
47、位图模式判断模块:用于判断如果能启用位图模式,则根据字体的倾斜幅度,使用横向斜体操作模块或者竖向斜体操作模块,实现字体斜体效果,如果不能启用位图模式,则使用矢量斜体操作模块,实现字体斜体效果;
48、横向斜体操作模块:使用横向斜体操作实现字体斜体效果;
49、竖向斜体操作模块:使用竖向斜体操作实现字体斜体效果;
50、矢量斜体操作模块:使用矢量斜体操作实现字体斜体效果。
51、有益效果:本发明提供了一种字体引擎能够实现字体的斜体效果,本发明的字体引擎在处理字体的斜体时,可以限定字体、字号,还能够根据预设的旋转角度选择相应的模式处理字体斜体,并且可以实现不同倾斜幅度和倾斜方向的字体斜体效果。