首页> 中国专利> 折线绘制方法、装置、电子设备及存储介质

折线绘制方法、装置、电子设备及存储介质

摘要

本申请公开了一种折线绘制方法、装置、电子设备及存储介质,属于图像处理技术领域。所述方法包括:根据点A、所述点A的偏移点D和偏移点G,以及点B和点C,确定所述点B的偏移点E和偏移点H,所述点A为已绘制的折线段上的最后一个点,所述点B为当前需要增加的点,所述点C为所述点B之后需要增加的一个点;如果当前绘制的折线类型为尖角折线,则根据所述偏移点D、所述偏移点G、所述偏移点E和所述偏移点H,确定两个三角形;渲染所述两个三角形,以绘制得到所述点A与所述点B之间的折线段。本申请提供的方法可以减少内存空间的消耗,以及需要渲染的三角形的数量,从而缩短了渲染时间,提高了渲染速度,进而提高了折线的绘制速度。

著录项

  • 公开/公告号CN110211202A

    专利类型发明专利

  • 公开/公告日2019-09-06

    原文格式PDF

  • 申请/专利权人 北京三快在线科技有限公司;

    申请/专利号CN201910471964.7

  • 发明设计人 舒经纬;

    申请日2019-05-31

  • 分类号

  • 代理机构北京三高永信知识产权代理有限责任公司;

  • 代理人祝亚男

  • 地址 100190 北京市海淀区北四环西路9号2106-030

  • 入库时间 2024-02-19 14:07:45

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-07-10

    授权

    授权

  • 2019-10-22

    实质审查的生效 IPC(主分类):G06T11/20 申请日:20190531

    实质审查的生效

  • 2019-09-06

    公开

    公开

说明书

技术领域

本申请涉及图像处理技术领域,特别涉及一种折线绘制方法、装置、电子设备及存储介质。

背景技术

折线通常具有一定的线宽,且折线可以包括平角折线、尖角折线和圆角折线。比如,图1所示的是一种平角折线,图2所示的是一种尖角折线,图3所示的是一种圆角折线。

目前,基本都是通过Open GL(Open Graphics Library,开放的图像程序接口)技术来绘制折线。如图4所示,通过Open GL技术绘制折线的操作可以为:对于已绘制的折线段上的点A,如果当前需要在点A的基础上,绘制点A与点B之间的折线段,那么可以在点A处沿线段AB的垂直方向上下偏移线宽一半距离,得到点A1和点A2,同理,在点C处确定得到点C1和点C2。在点B处沿线段AB以及线段BC的垂直方向上偏移线宽一半距离得到点B1和点B2,端点为点A1且平行于线段AB的射线与端点为点C1且平行于线段BC的射线相交于点D1。将三角形A2D1B1、A2A1D1确定为折线主体区域三角形。如果绘制尖角折线,则连接线段A2B1、C2B2的反向延长线相交于点F1,将三角形B1D1F1、B2D1F1确定为折线转角区域三角形。之后,将所有的折线主体区域三角形以及折线转角区域三角形渲染出来,即可在点A的基础上绘制得到点A与点B之间的折线段。同理,可以按照上述方法,在点B的基础上绘制点B与点C之间的折线段。

然而,上述方法在折线每增加一个点时,对于尖角折线,需要存储四个点的数据,以及渲染四个三角形,而渲染时间通常是以三角形的数量来计算的,因此,上述方法不仅消耗了大量的内存空间,还会影响渲染速度。比如,当前是在点A的基础上增加点B,那么,需要存储B1、B2、F1、D1这四个点的数据,且需要渲染A2D1B1、A2A1D1、B1D1F1、B2D1F1这四个三角形。

发明内容

本申请提供了一种折线绘制方法、装置、电子设备及存储介质,可以解决相关技术的内存空间消耗较大、渲染速度较慢的问题。所述技术方案如下:

一方面,提供了一种折线绘制方法,所述方法包括:

根据点A、所述点A的偏移点D和偏移点G,以及点B和点C,确定所述点B的偏移点E和偏移点H,所述点A为已绘制的折线段上的最后一个点,所述点B为当前需要增加的点,所述点C为所述点B之后需要增加的一个点;

如果当前绘制的折线类型为尖角折线,则根据所述偏移点D、所述偏移点G、所述偏移点E和所述偏移点H,确定两个三角形;

渲染所述两个三角形,以绘制得到所述点A与所述点B之间的折线段。

可选地,所述根据点A、所述点A的偏移点D和偏移点G,以及点B和点C,确定所述点B的偏移点E和偏移点H,包括:

确定与第一线段之间的距离为待绘制的折线段的线宽的一半且平行于所述第一线段的两条射线,所述第一线段为所述点A与所述点B之间的线段,所述两条射线的端点分别为所述偏移点D和所述偏移点G;

确定与第二线段之间的距离为所述线宽的一半且平行于所述第二线段的两条直线,所述第二线段为所述点B与所述点C之间的线段;

将所述两条射线中的第一射线与所述两条直线中的第一直线之间的交点确定为所述偏移点H,将所述两条射线中的第二射线与所述两条直线中的第二直线之间的交点确定为所述偏移点E,所述第一射线是指端点为所述偏移点G的射线,所述第二射线是指端点为所述偏移点D的射线,所述第一直线是指与所述第一射线首个相交的直线,所述第二直线是指所述两条射线中除所述第一直线之外的一条直线。

可选地,所述根据点A、所述点A的偏移点D和偏移点G,以及点B和点C,确定所述点B的偏移点E和偏移点H之后,还包括:

如果当前绘制的折线类型为平角折线,则确定点J和点K,所述点J与所述点B之间的连线与第一线段垂直,所述点K与所述点B之间的连线与第二线段垂直,所述第一线段为所述点A与所述点B之间的线段,所述第二线段为所述点B与所述点C之间的线段;

根据所述偏移点D、所述偏移点G、所述偏移点H、所述点J和所述点K,确定三个三角形;

渲染所述三个三角形,以绘制得到所述点A与所述点B之间的折线段。

可选地,所述根据点A、所述点A的偏移点D和偏移点G,以及点B和点C,确定所述点B的偏移点E和偏移点H之后,还包括:

如果当前绘制的折线类型为圆角折线,则增加位置与所述偏移点D相同的点D’,以及增加位置与所述偏移点G相同的点G’;

设置所述点D’、所述点G’、所述偏移点E和所述偏移点H的顶点坐标和线长;

根据所述点D’、所述点G’、所述偏移点E和所述偏移点H的顶点坐标和线长,筛选掉四边形区域D’EHG’中满足筛选条件的点;

将筛选后剩余的点进行渲染,以绘制得到所述点A与所述点B之间的折线段。

可选地,所述设置所述点D’、所述点G’、所述偏移点E和所述偏移点H的顶点坐标和线长,包括:

确定第一角度和第二角度,所述第一角度是指以所述点A为拐角的角度的一半,所述第二角度是指以所述点B为拐角的角度的一半;

按照所述第一角度、所述第二角度和第一线段的线长,确定所述点D’、所述点G’、所述偏移点E和所述偏移点H的顶点坐标,所述第一线段为所述点A与所述点B之间的线段;

将所述点D’、所述点G’、所述偏移点E和所述偏移点H的线长设置为所述第一线段的线长。

可选地,所述根据所述点D’、所述点G’、所述偏移点E和所述偏移点H的顶点坐标和线长,筛选掉四边形区域D’EHG’中不满足筛选条件的点之前,还包括:

从第三线段上选择一个点P,所述第三线段为所述偏移点E与所述偏移点H之间的线段,且所述第三线段经过所述点B;

确定所述点P与第一线段之间的距离,以及所述点P与第二线段之间的距离,所述第一线段为所述点A与所述点B之间的线段,所述第二线段为所述点B与所述点C之间的线段;

根据第一线段的线长、所述点P与所述第一线段之间的距离,以及所述点P与所述第二线段之间的距离,确定所述筛选条件。

另一方面,提供了一种折线绘制装置,所述装置包括:

第一确定模块,用于根据点A、所述点A的偏移点D和偏移点G,以及点B和点C,确定所述点B的偏移点E和偏移点H,所述点A为已绘制的折线段上的最后一个点,所述点B为当前需要增加的点,所述点C为所述点B之后需要增加的一个点;

第二确定模块,用于如果当前绘制的折线类型为尖角折线,则根据所述偏移点D、所述偏移点G、所述偏移点E和所述偏移点H,确定两个三角形;

第一渲染模块,用于渲染所述两个三角形,以绘制得到所述点A与所述点B之间的折线段。

可选地,所述第一确定模块包括:

第一确定子模块,用于确定与第一线段之间的距离为待绘制的折线段的线宽的一半且平行于所述第一线段的两条射线,所述第一线段为所述点A与所述点B之间的线段,所述两条射线的端点分别为所述偏移点D和所述偏移点G;

第二确定子模块,用于确定与第二线段之间的距离为所述线宽的一半且平行于所述第二线段的两条直线,所述第二线段为所述点B与所述点C之间的线段;

第三确定子模块,用于将所述两条射线中的第一射线与所述两条直线中的第一直线之间的交点确定为所述偏移点H,将所述两条射线中的第二射线与所述两条直线中的第二直线之间的交点确定为所述偏移点E,所述第一射线是指端点为所述偏移点G的射线,所述第二射线是指端点为所述偏移点D的射线,所述第一直线是指与所述第一射线首个相交的直线,所述第二直线是指所述两条射线中除所述第一直线之外的一条直线。

另一方面,提供了一种电子设备,所述电子设备包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行上述所述的折线绘制方法。

另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述所述的折线绘制方法。

本申请提供的技术方案至少可以带来以下有益效果:在本申请中,对于尖角折线,只需要确定点B的偏移点E和偏移点H,从而确定两个三角形,通过对这两个三角形的渲染,以绘制得到点A与点B之间的折线段。也即是,本申请只需要增加两个点,进而只需要存储这两个点的数据,减少了内存空间的消耗。而且只需要渲染两个三角形,减少了需要渲染的三角形数量,从而缩短了渲染时间,进而提高了渲染速度,也就提高了折线的绘制速度。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是相关技术提供的一种平角折线的示意图;

图2是相关技术提供的一种尖角折线的示意图;

图3是相关技术提供的一种圆角折线的示意图;

图4是相关技术提供的一种折线的绘制过程的示意图;

图5是本申请实施例提供的一种折线绘制方法的流程图;

图6是本申请实施例提供的一种尖角折线的绘制过程示意图;

图7是本申请实施例提供的一种平角折线的绘制过程示意图;

图8是本申请实施例提供的一种用于示意第一角度和第二角度的示意图;

图9是本申请实施例提供的一种绘制得到的圆角折线的示意图;

图10是本申请实施例提供的一种折线绘制装置的结构示意图;

图11是本申请实施例提供的另一种折线绘制装置的结构示意图;

图12是本申请实施例提供的又一种折线绘制装置的结构示意图;

图13是本申请实施例提供的一种终端的结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。

为了通过电子地图进行导航,或者通过电子地图查看两个位置之间的距离以及行驶路线,通常需要在电子地图上绘制路线。绘制的路线中通常会出现折线路段,且为了保证折线路段的显示多样性,折线路段的拐点处可以绘制为尖角状、平角状或者圆角状。本申请提出了一种折线绘制方法,通过该折线绘制方法可以对上述折线路段进行绘制。也即是,通过本申请提供的折线绘制方法,可以绘制出尖角折线、平角折线或者圆角折线。

本申请提供的折线绘制方法可以应用于折线绘制装置中,该折线绘制装置可以为终端。作为一种示例,终端可以是任何一种可与用户通过键盘、触摸板、触摸屏、遥控器、语音交互或手写设备等一种或多种方式进行人机交互的电子产品,例如PC(PersonalComputer,个人计算机)、手机、PDA(Personal Digital Assistant,个人数字助手)、可穿戴设备、平板电脑、车载电脑等。应当理解的是,上述终端仅为举例,其他现有的或今后可能出现的终端如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。

折线通常是通过多个折线段组合得到,也即是,为了绘制一条折线,需要从第一个点开始,绘制第一个点与第二个点之间的折线段,然后,在第二个点的基础上,绘制第二个点与第三个点之间的折线段,以此类推,最终可以得到一条折线。因此,本申请实施例对折线中的一个折线段的绘制方法进行阐述,这条折线上的其他折线段的绘制方法可以参考本申请实施例提供的方法,在此不再对其他折线段的绘制方法进行赘述。

图5是根据一示例性实施例示出的一种折线绘制方法的流程图。该方法可以应用与上述的终端中,参见图5,该方法包括如下步骤。

步骤501:根据点A、点A的偏移点D和偏移点G,以及点B和点C,确定点B的偏移点E和偏移点H,点A为已绘制的折线段上的最后一个点,点B为当前需要增加的点,点C为点B之后需要增加的一个点。

由于点A为已绘制的折线段上的最后一个点,点B为当前需要增加的点,也即是,当前需要绘制点A与点B之间的折线段。由于绘制的折线段具有一定的线宽,因此,需要先确定点B的偏移点E和偏移点H,进而通过偏移点E和偏移点H绘制具有一定线宽的折线段。

在一些实施例中,可以确定与第一线段之间的距离为待绘制的折线段的线宽的一半且平行于第一线段的两条射线,第一线段为点A与点B之间的线段,两条射线的端点分别为偏移点D和偏移点G。确定与第二线段之间的距离为线宽的一半且平行于第二线段的两条直线,第二线段为点B与点C之间的线段。将两条射线中的第一射线与两条直线中的第一直线之间的交点确定为偏移点H,将两条射线中的第二射线与两条直线中的第二直线之间的交点确定为偏移点E,第一射线是指端点为偏移点G的射线,第二射线是指端点为偏移点D的射线,第一直线是指与第一射线首个相交的直线,第二直线是指两条射线中除第一直线之外的一条直线。

示例性地,假设点A与点B之间的折线段的线宽为2个像素,参见图6,可以确定与线段AB之间的距离为1个像素且平行于线段AB的两条射线,分别为从D点出发的一条射线和从G点出发的一条射线,即第一射线和第二射线。确定与线段BC之间的距离为1个像素且平行于线段BC的两条直线,即第一直线和第二直线。将第一射线与第一直线的交点确定为偏移点H,将第二射线与第二直线之间的交点确定为偏移点E。

需要说明的是,折线段上的每个拐点的数据可以事先存储,比如,点A、点B和点C的数据可以事先存储。而且,每个点的数据可以包括这个点的坐标,还可以包括这个点的其他属性,比如,透明度。

另外,通常情况下,一条折线上的每个折线段的线宽可以相同,当然,不同折线段的线宽也可以不同。当每个折线段的线宽不同时,可以为每个折线段设置一个标识,然后将每个折线段的标识与每个折线段的线宽对应存储。示例性地,可以为折线上的每个拐点设置一个编号,对于非首个拐点,可以将这个拐点的编号,以及每个拐点与其前一个拐点之间的线宽对应存储。这样,在绘制点A与点B之间的折线段时,可以根据点B的编号获取点B与点A之间的线宽,也即是,上述步骤中所述的待绘制的折线段的线宽。

步骤502:如果当前绘制的折线类型为尖角折线,则根据偏移点D、偏移点G、偏移点E和偏移点H,确定两个三角形。

在一些实施例中,可以根据偏移点D、偏移点G、偏移点E和偏移点H,确定三角形DGE和三角形GHE。当然,在另一些实施例中,可以根据偏移点D、偏移点G、偏移点E和偏移点H,确定三角形DGH和三角形DHE。

在确定偏移点E和偏移点H之后,可以直接根据偏移点D、偏移点G、偏移点E和偏移点H,确定两个三角形。由于偏移点D和偏移点G是在增加点A时增加的两个点,当前只需要增加偏移点E和偏移点H这两个点,进而只需要存储偏移点E和偏移点H这两个点的数据,相比于相关技术,减少了内存空间的消耗,提高了对偏移点D和偏移点G的复用性。也即是,在折线上每增加一个点,或者说,每增加一个折线段,只需要存储两个点的数据,从而就会减少内存空间的消耗。

同理,在绘制点B与点C之间的折线段时,只需要增加点C的两个偏移点,然后利用偏移点E和偏移点H,从而减少了内存空间的消耗,提高了偏移点E和偏移点H的复用性。

步骤503:渲染确定的两个三角形,以绘制得到点A与点B之间的折线段。

在确定两个三角形之后,可以对这两个三角形进行渲染,从而可以绘制得到点A与点B之间的折线段,且该折线段具有一定的线宽。

在一些实施例中,可以通过OpenGL的三角形渲染方式进行上述两个三角形的渲染。

对于尖角折线,本申请提供的方法,只需要渲染两个三角形,相比于相关技术,减少了需要渲染的三角形数量,从而缩短了渲染时间,进而提高了渲染速度,也就提高了折线的绘制速度。

尖角折线只是折线的一种类型,对于其他类型的折线,比如,平角折线和圆角折线,在通过上述步骤501确定点B的偏移点E和偏移点H之后,还可以通过下述方式来绘制。

关于平角折线

如果当前绘制的折线类型为平角折线,则确定点J和点K,点J与点B之间的连线与第一线段垂直,点K与点B之间的连线与第二线段垂直,第一线段为点A与点B之间的线段,第二线段为点B与点C之间的线段。根据偏移点D、偏移点G、偏移点H、点J和点K,确定三个三角形。渲染这三个三角形,以绘制得到点A与点B之间的折线段。

示例性地,参见图7,可以确定与线段AB垂直且端点为点B的第三射线,以及与线段BC垂直且端点为点B的第四射线,将第三射线与线段DE的交点确定为点J,将第四射线与线段BC的交点确定为点K。然后,根据偏移点D、偏移点G、偏移点H、点J和点K,确定三个三角形。渲染这三个三角形,以绘制得到点A与点B之间的折线段。

在一些实施例中,可以根据偏移点D、偏移点G、偏移点H、点J和点K,确定三角形DGJ、三角形GJH和三角形JHK。当然,在另一些实施例中,可以根据偏移点D、偏移点G、偏移点H、点J和点K,确定三角形DGH、三角形DHJ和三角形JHK。或者,在其他一些实施例中,可以根据偏移点D、偏移点G、偏移点H、点J和点K,确定三角形DGH、三角形DHK和三角形DKJ。又或者,可以根据偏移点D、偏移点G、偏移点H、点J和点K,确定三角形DGJ、三角形JGK和三角形GHK。

需要说明的是,渲染这三个三角形的方式与绘制尖角折线时绘制的两个三角形的方式可以相同,在此不再赘述。

在确定偏移点E和偏移点H之后,可以直接根据偏移点D、偏移点G、偏移点H、点J和点K,确定三个三角形。由于偏移点D和偏移点G是在增加点A时增加的两个点,当前只需要增加偏移点H、点J和点K这三个点,进而只需要存储偏移点H、点J和点K这三个点的数据,相比于相关技术,减少了内存空间的消耗,提高了对偏移点D和偏移点G的复用性。也即是,在折线上每增加一个点,或者说,每增加一个折线段,只需要存储三个点的数据,从而就会减少内存空间的消耗。而且对于平角折线,本申请提供的方法,只需要渲染三个三角形,相比于相关技术,减少了需要渲染的三角形数量,从而缩短了渲染时间,进而提高了渲染速度,也就提高了折线的绘制速度。

关于圆角折线

如果当前绘制的折线类型为圆角折线,则增加位置与偏移点D相同的点D’,以及增加位置与偏移点G相同的点G’。设置点D’、点G’、偏移点E和偏移点H的顶点坐标和线长。根据点D’、点G’、偏移点E和偏移点H的顶点坐标和线长,筛选掉四边形区域D’EHG’中满足筛选条件的点。将筛选后剩余的点进行渲染,以绘制得到点A与点B之间的折线段。

在一些实施例中,可以确定第一角度和第二角度,第一角度是指以点A为拐角的角度的一半,第二角度是指以点B为拐角的角度的一半。按照第一角度、第二角度和第一线段的线长,确定点D’、点G’、偏移点E和偏移点H的顶点坐标,第一线段为点A与点B之间的线段。将点D’、点G’、偏移点E和偏移点H的线长设置为第一线段的线长。

由于偏移点H为第一射线与第一直线之间的交点,偏移点E为第二射线与第二直线之间的交点,且第一射线和第二射线分别与第一线段之间的距离为线宽的一半,第一直线和第二直线分别与第二线段之间的距离也为线宽的一半,因此,线段EH为∠ABC的角平分线。这样,以点B为拐角的角度的一半即为∠ABH或者∠HBC。同理,以点A为拐角的角度的一半即为∠G’AB。换句话说,第一角度为∠ABH或者∠HBC,第二角度为∠G’AB。

示例性地,参见图8,为了便于描述,假设点C的两个偏移点分别为点I和点F。由于线段D’E与线段AB平行,线段G’H与线段AB平行,且线段D’E与线段AB之间的距离,以及线段G’H与线段AB之间的距离相等且为线宽的一半。线段HI与线段BC平行,线段EF与线段BC平行,且线段HI与线段BC之间的距离,以及线段EF与线段BC之间的距离相等且为线宽的一半,因此,线段EH为∠ABC的角平分线。这样,第一角度为∠ABH或者∠HBC,第二角度为∠G’AB。

作为一种示例,可以设置点D’的顶点坐标为(-d/2-s/tanθ1,s)、点G’的顶点坐标为(-d/2+s/tanθ1,-s)、偏移点E的顶点坐标为(d/2+s/tanθ2,s),偏移点H的顶点坐标为(d/2-s/tanθ2,-s)。其中,d为线段AB的长度,s为线宽的一半,θ1为第一角度,θ2为第二角度。

更简单地,可以将线宽的一半进行归一化,也即是,线宽的一半为1,此时,设置点D’的顶点坐标为(-d/2-1/tanθ1,1)、点G’的顶点坐标为(-d/2+1/tanθ1,-1)、偏移点E的顶点坐标为(d/2+1/tanθ2,1),偏移点H的顶点坐标为(d/2-1/tanθ2,-1)。

也即是,线段AB的中点为坐标原点,点A到点B的方向为横轴的方向,垂直于线段AB且朝向线段DE的方向为纵轴的方向。

当然,上述方式只是一种实现方式,本申请实施例还可以通过其他的方式来设置点D’、点G’、偏移点E和偏移点H的顶点坐标和线长。

在一些实施例中,根据点D’、点G’、偏移点E和偏移点H的顶点坐标和线长,筛选掉四边形区域D’EHG’中不满足筛选条件的点之前,还可以设置筛选条件。即,从第三线段上选择一个点P,第三线段为偏移点E与偏移点H之间的线段,且第三线段经过点B。确定点P与第一线段之间的距离,以及点P与第二线段之间的距离,第一线段为点A与点B之间的线段,第二线段为点B与点C之间的线段。根据第一线段的线长、点P与第一线段之间的距离,以及点P与第二线段之间的距离,确定筛选条件。

基于上述描述,线段EH为∠ABC的角平分线,因此,在线段EH上任意选择一个点P,点P与线段D’E之间的距离,以及点P与线段EF之间的距离相等,这样,即可将点P作为圆心,将点P线段D’E之间的距离或者点P与线段EF之间的距离作为半径,绘制圆形区域,将圆形区域之外的点筛选掉,将四边形区域D’EHG’中筛选后剩余的点进行渲染,从而可以得到圆角比较平滑的圆角折线。

作为一种示例,筛选条件可以通过如下不等式来表示:

|x|>d/2,(|x|-x1)^2+(|y|-y1)^2>1

其中,d为线宽,(x1,y1)为点P的坐标。

更简单地,可以将点B所在的位置作为圆心,这样,筛选条件可以通过如下不等式来表示:

|x|>d/2,(|x|-d/2)^2+y^2>1

在一些实施例中,在点D’、点G’、偏移点E和偏移点H的顶点坐标和线长之后,可以根据点D’、点G’、偏移点E和偏移点H确定两个三角形,然后按照筛选条件,渲染这两个三角形,从而可以绘制得到点A与点B之间的折线段。作为一种示例,可以将确定出的两个三角形的顶点坐标和线长输入顶点着色器,也即是,将点D’、点G’、偏移点E和偏移点H的顶点坐标和线长输入至顶点着色器中,通过顶点着色器确定四边形区域DGHE中的每个点的坐标。然后将四边形区域DGHE中的每个像素的坐标输入至片元着色器中,通过至片元着色器来筛选掉四边形区域D’EHG’中不满足筛选条件的像素。将筛选后剩余的像素进行渲染,以绘制得到点A与点B之间的折线段。

需要说明的是,顶点着色器和片元着色器为终端中的一个插件,用于进行图像的渲染。另外,对于满足筛选条件的像素,可以设置这些像素的透明度为0,对于不满足筛选条件的像素进行渲染,这样既可绘制出比较平滑的圆角折线。

示例地,假设以点B所在的位置作为圆心构建筛选条件,此时,通过上述方式渲染后的折线如图9所示的填充部分。

在确定偏移点E和偏移点H之后,可以增加位置与偏移点D相同的点D’,以及增加位置与偏移点G相同的点G’。然后根据点D’、点G’、偏移点E和偏移点H的顶点坐标和线长,筛选掉四边形区域D’EHG’中满足筛选条件的点。由于点D’、点G’、偏移点E和偏移点H可以确定出两个三角形。也即是,当前只需要存储点D’、点G’、偏移点E和偏移点H这四个点的数据,相比于相关技术,减少了内存空间的消耗,提高了对偏移点D和偏移点G的复用性。也即是,在折线上每增加一个点,或者说,每增加一个折线段,只需要存储四个点的数据,从而就会减少内存空间的消耗。而且对于圆角折线,本申请提供的方法,只需要渲染两个三角形,相比于相关技术,减少了需要渲染的三角形数量,从而缩短了渲染时间,进而提高了渲染速度,也就提高了折线的绘制速度。

在本申请实施例中,对于尖角折线,只需要增加两个点,进而只需要存储这两个点的数据,减少了内存空间的消耗。而且只需要渲染两个三角形,减少了需要渲染的三角形数量,从而缩短了渲染时间,进而提高了渲染速度,也就提高了折线的绘制速度。对于平角折线,只需要增加三个点,进而只需要存储这三个点的数据,减少了内存空间的消耗。而且只需要渲染三个三角形,减少了需要渲染的三角形数量,从而缩短了渲染时间,进而提高了渲染速度,也就提高了折线的绘制速度。对于圆角折线,只需要增加四个点,进而只需要存储这四个点的数据,减少了内存空间的消耗。而且只需要渲染两个三角形,减少了需要渲染的三角形数量,从而缩短了渲染时间,进而提高了渲染速度,也就提高了折线的绘制速度,并且渲染出的圆角折线的平滑度较好,不会因放大而导致失真的问题产生。

图10是本申请实施例提供的一种折线绘制装置的结构示意图,该折线绘制装置可以由软件、硬件或者两者的结合实现成为终端的部分或者全部。参见图10,该装置包括:第一确定模块1001、第二确定模块1002和第一渲染模块1003。

第一确定模块1001,用于根据点A、点A的偏移点D和偏移点G,以及点B和点C,确定点B的偏移点E和偏移点H,点A为已绘制的折线段上的最后一个点,点B为当前需要增加的点,点C为点B之后需要增加的一个点;

第二确定模块1002,用于如果当前绘制的折线类型为尖角折线,则根据偏移点D、偏移点G、偏移点E和偏移点H,确定两个三角形;

第一渲染模块1003,用于渲染两个三角形,以绘制得到点A与点B之间的折线段。

可选地,第一确定模块1001包括:

第一确定子模块,用于确定与第一线段之间的距离为待绘制的折线段的线宽的一半且平行于第一线段的两条射线,第一线段为点A与点B之间的线段,两条射线的端点分别为偏移点D和偏移点G;

第二确定子模块,用于确定与第二线段之间的距离为线宽的一半且平行于第二线段的两条直线,第二线段为点B与点C之间的线段;

第三确定子模块,用于将两条射线中的第一射线与两条直线中的第一直线之间的交点确定为偏移点H,将两条射线中的第二射线与两条直线中的第二直线之间的交点确定为偏移点E,第一射线是指端点为偏移点G的射线,第二射线是指端点为偏移点D的射线,第一直线是指与第一射线首个相交的直线,第二直线是指两条射线中除第一直线之外的一条直线。

可选地,参见图11,该装置还包括:

第三确定模块1004,用于如果当前绘制的折线类型为平角折线,则确定点J和点K,点J与点B之间的连线与第一线段垂直,点K与点B之间的连线与第二线段垂直,第一线段为点A与点B之间的线段,第二线段为点B与点C之间的线段;

第四确定模块1005,用于根据偏移点D、偏移点G、偏移点H、点J和点K,确定三个三角形;

第二渲染模块1006,用于渲染三个三角形,以绘制得到点A与点B之间的折线段。

可选地,参见图12,该装置还包括:

增加模块1007,用于如果当前绘制的折线类型为圆角折线,则增加位置与偏移点D相同的点D’,以及增加位置与偏移点G相同的点G’;

设置模块1008,用于设置点D’、点G’、偏移点E和偏移点H的顶点坐标和线长;

筛选模块1009,用于根据点D’、点G’、偏移点E和偏移点H的顶点坐标和线长,筛选掉四边形区域D’EHG’中满足筛选条件的点;

第三渲染模块1010,用于将筛选后剩余的点进行渲染,以绘制得到点A与点B之间的折线段。

可选地,设置模块1008包括:

第四确定子模块,用于确定第一角度和第二角度,第一角度是指以点A为拐角的角度的一半,第二角度是指以点B为拐角的角度的一半;

第五确定子模块,用于按照第一角度、第二角度和第一线段的线长,确定点D’、点G’、偏移点E和偏移点H的顶点坐标,第一线段为点A与点B之间的线段;

设置子模块,用于将点D’、点G’、偏移点E和偏移点H的线长设置为第一线段的线长。

可选地,该装置还包括:

选择模块,用于从第三线段上选择一个点P,第三线段为偏移点E与偏移点H之间的线段,且第三线段经过点B;

第五确定模块,用于确定点P与第一线段之间的距离,以及点P与第二线段之间的距离,第一线段为点A与点B之间的线段,第二线段为点B与点C之间的线段;

第六确定模块,用于根据第一线段的线长、点P与第一线段之间的距离,以及点P与第二线段之间的距离,确定筛选条件。

在本申请实施例中,对于尖角折线,只需要增加两个点,进而只需要存储这两个点的数据,减少了内存空间的消耗。而且只需要渲染两个三角形,减少了需要渲染的三角形数量,从而缩短了渲染时间,进而提高了渲染速度,也就提高了折线的绘制速度。对于平角折线,只需要增加三个点,进而只需要存储这三个点的数据,减少了内存空间的消耗。而且只需要渲染三个三角形,减少了需要渲染的三角形数量,从而缩短了渲染时间,进而提高了渲染速度,也就提高了折线的绘制速度。对于圆角折线,只需要增加四个点,进而只需要存储这四个点的数据,减少了内存空间的消耗。而且只需要渲染两个三角形,减少了需要渲染的三角形数量,从而缩短了渲染时间,进而提高了渲染速度,也就提高了折线的绘制速度,并且渲染出的圆角折线的平滑度较好,不会因放大而导致失真的问题产生。

需要说明的是:上述实施例提供的折线绘制装置在进行折线绘制时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的折线绘制装置与折线绘制方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。

图13示出了本申请一个示例性实施例提供的终端1300的结构框图。该终端1300可以是便携式移动终端,比如:智能手机、平板电脑、MP3播放器(Moving Picture ExpertsGroup Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving PictureExperts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端1300还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。

通常,终端1300包括有:处理器1301和存储器1302。

处理器1301可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器1301可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器1301也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器1301可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器1301还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。

存储器1302可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器1302还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器1302中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器1301所执行以实现本申请中方法实施例提供的折线绘制方法。

在一些实施例中,终端1300还可选包括有:外围设备接口1303和至少一个外围设备。处理器1301、存储器1302和外围设备接口1303之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口1303相连。具体地,外围设备包括:射频电路1304、触摸显示屏1305、摄像头1306、音频电路1307、定位组件1308和电源1309中的至少一种。

外围设备接口1303可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器1301和存储器1302。在一些实施例中,处理器1301、存储器1302和外围设备接口1303被集成在同一芯片或电路板上;在一些其他实施例中,处理器1301、存储器1302和外围设备接口1303中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。

射频电路1304用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路1304通过电磁信号与通信网络以及其他通信设备进行通信。射频电路1304将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路1304包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路1304可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:万维网、城域网、内联网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路1304还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。

显示屏1305用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏1305是触摸显示屏时,显示屏1305还具有采集在显示屏1305的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器1301进行处理。此时,显示屏1305还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏1305可以为一个,设置终端1300的前面板;在另一些实施例中,显示屏1305可以为至少两个,分别设置在终端1300的不同表面或呈折叠设计;在再一些实施例中,显示屏1305可以是柔性显示屏,设置在终端1300的弯曲表面上或折叠面上。甚至,显示屏1305还可以设置成非矩形的不规则图形,也即异形屏。显示屏1305可以采用LCD(Liquid Crystal Display,液晶显示屏)、OLED(Organic Light-Emitting Diode,有机发光二极管)等材质制备。

摄像头组件1306用于采集图像或视频。可选地,摄像头组件1306包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件1306还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。

音频电路1307可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器1301进行处理,或者输入至射频电路1304以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端1300的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器1301或射频电路1304的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路1307还可以包括耳机插孔。

定位组件1308用于定位终端1300的当前地理位置,以实现导航或LBS(LocationBased Service,基于位置的服务)。定位组件1308可以是基于美国的GPS(GlobalPositioning System,全球定位系统)、中国的北斗系统或俄罗斯的伽利略系统的定位组件。

电源1309用于为终端1300中的各个组件进行供电。电源1309可以是交流电、直流电、一次性电池或可充电电池。当电源1309包括可充电电池时,该可充电电池可以是有线充电电池或无线充电电池。有线充电电池是通过有线线路充电的电池,无线充电电池是通过无线线圈充电的电池。该可充电电池还可以用于支持快充技术。

在一些实施例中,终端1300还包括有一个或多个传感器1310。该一个或多个传感器1310包括但不限于:加速度传感器1311、陀螺仪传感器1312、压力传感器1313、指纹传感器1314、光学传感器1315以及接近传感器1316。

加速度传感器1311可以检测以终端1300建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器1311可以用于检测重力加速度在三个坐标轴上的分量。处理器1301可以根据加速度传感器1311采集的重力加速度信号,控制触摸显示屏1305以横向视图或纵向视图进行用户界面的显示。加速度传感器1311还可以用于游戏或者用户的运动数据的采集。

陀螺仪传感器1312可以检测终端1300的机体方向及转动角度,陀螺仪传感器1312可以与加速度传感器1311协同采集用户对终端1300的3D动作。处理器1301根据陀螺仪传感器1312采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。

压力传感器1313可以设置在终端1300的侧边框和/或触摸显示屏1305的下层。当压力传感器1313设置在终端1300的侧边框时,可以检测用户对终端1300的握持信号,由处理器1301根据压力传感器1313采集的握持信号进行左右手识别或快捷操作。当压力传感器1313设置在触摸显示屏1305的下层时,由处理器1301根据用户对触摸显示屏1305的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。

指纹传感器1314用于采集用户的指纹,由处理器1301根据指纹传感器1314采集到的指纹识别用户的身份,或者,由指纹传感器1314根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器1301授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器1314可以被设置终端1300的正面、背面或侧面。当终端1300上设置有物理按键或厂商Logo时,指纹传感器1314可以与物理按键或厂商Logo集成在一起。

光学传感器1315用于采集环境光强度。在一个实施例中,处理器1301可以根据光学传感器1315采集的环境光强度,控制触摸显示屏1305的显示亮度。具体地,当环境光强度较高时,调高触摸显示屏1305的显示亮度;当环境光强度较低时,调低触摸显示屏1305的显示亮度。在另一个实施例中,处理器1301还可以根据光学传感器1315采集的环境光强度,动态调整摄像头组件1306的拍摄参数。

接近传感器1316,也称距离传感器,通常设置在终端1300的前面板。接近传感器1316用于采集用户与终端1300的正面之间的距离。在一个实施例中,当接近传感器1316检测到用户与终端1300的正面之间的距离逐渐变小时,由处理器1301控制触摸显示屏1305从亮屏状态切换为息屏状态;当接近传感器1316检测到用户与终端1300的正面之间的距离逐渐变大时,由处理器1301控制触摸显示屏1305从息屏状态切换为亮屏状态。

本领域技术人员可以理解,图13中示出的结构并不构成对终端1300的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。

在示例性实施例中,还提供了一种计算机可读存储介质,例如包括指令的存储器,上述指令可由终端中的处理器执行以完成上述实施例中的折线绘制方法。例如,所述计算机可读存储介质可以是ROM(read-only memory,只读存储器)、RAM(random accessmemory,随机存取存储器)、CD-ROM(Compact Disc Read-Only Memory,只读光盘)、磁带、软盘和光数据存储设备等。

值得注意的是,本申请提到的计算机可读存储介质可以为非易失性存储介质,换句话说,是非瞬时性存储介质。

应当理解的是,实现上述实施例的全部或部分步骤可以通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。所述计算机指令可以存储在上述计算机可读存储介质中。

以上所述为本申请提供的实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号