宽线描绘方法及装置制造方法
【专利摘要】本发明提供一种宽线描绘方法及装置,所述方法包括以下步骤:获取第一描绘点的坐标,根据第一描绘点的坐标与线宽描绘圆形宽线;获取第二描绘点的坐标,并根据所述第一描绘点的坐标、第二描绘点的坐标及线宽计算在先矩形的参数信息;根据所述圆形宽线及在先矩形的参数信息的描绘相应的宽线。本发明的一种宽线描绘方法及装置避免了对已经描绘过的线段重复描绘,减少了需要处理的数据量,提高了宽线描绘的速度与流畅度。
【专利说明】宽线描绘方法及装置
【技术领域】
[0001]本发明涉及图像显示【技术领域】,具体涉及一种线宽描绘方法及一种线宽描绘装置。
【背景技术】
[0002]目前,智能手机、浏览器组件等设备普遍支持0penGLES2.0的非固定管线的显示技术进行图形图像描绘。OpenGLES不支持某些标准OpenGL的接口,或者对某些功能进行继续限制,因此在进行显示时往往需要开发人员设计一些算法以实现复杂的功能。
[0003]由于0penGLES2.0只支持线宽为一个象素的线的显示,而实际应用中往往需要描绘线宽大于一个像素的粗线,例如在手机或者平板上书写线时,线的宽度就比较大。由于没有相关描绘粗线的接口,因此就需要设计算法进行粗线的显示。目前,一般的方法是由每相邻的两点构造粗线段,并使用矩形填充每两个粗线段间的空隙。这是绘粗线的通用方法,当两个点间的距离较远时,性能较好,但是当点比较密集、数量较多时,比如当通过鼠标的移动去采集线的描绘点时,描绘点的数量是非常多的,这种方法需要处理的数据量比较大,性能将下降,从而导致在描绘宽线时的速度较慢。
[0004]因此,有必要提供一种基于OpenGL的非固定管线的环境中快速、流畅的宽线描绘方法。
【发明内容】
[0005]基于此,本发明提供一种宽线描绘方法及装置,能有效的提高描绘宽线的速度与流畅度。
[0006]为实现上述目的,本发明采用如下的技术方案:
[0007]一种宽线描绘方法,包括以下步骤:
[0008]获取第一描绘点的坐标,根据第一描绘点的坐标与线宽描绘圆形宽线;
[0009]获取第二描绘点的坐标,并根据所述第一描绘点的坐标、第二描绘点的坐标及线宽计算在先矩形的参数信息;
[0010]根据所述圆形宽线及在先矩形的参数信息描绘相应的宽线。
[0011]一种宽线描绘装置,包括:
[0012]第一描绘模块,用于获取第一描绘点的坐标,根据第一描绘点的坐标与线宽描绘圆形宽线;
[0013]第一计算模块,用于获取第二描绘点的坐标,并根据所述第一描绘点的坐标、第二描绘点的坐标及线宽计算在先矩形的参数信息;
[0014]第二描绘模块,用于根据所述圆形宽线及在先矩形的参数信息描绘相应的宽线。
[0015]由以上方案可以看出,本发明的一种宽线描绘方法及装置,通过第一描绘点的坐标与线宽描绘圆形宽线,并通过第一描绘点的坐标、第二描绘点的坐标及线宽计算在先矩形的参数信息,然后根据所述圆形宽线及在先矩形的参数信息在各相邻两个描绘点之间描绘相应的宽线,从而描绘出一个完整的宽线。由于本发明通过圆形宽线与在先矩形的参数信息来确定相邻两个描绘点之间的宽线,从而避免了对已经描绘过的线段的重复描绘,减少了需要处理的数据量,提高了宽线描绘的速度与流畅度。
【专利附图】
【附图说明】
[0016]图1为本发明实施例中的一种宽线描绘方法流程示意图;
[0017]图2为本发明实施例中的宽线描绘时的示意图;
[0018]图3为本发明实施例中的一种宽线描绘装置示意图。
【具体实施方式】
[0019]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0020]实施例一
[0021]参见图1所示,一种宽线描绘方法,包括以下步骤:
[0022]步骤S101,获取第一描绘点的坐标,根据第一描绘点的坐标、线宽描绘圆形宽线。例如,可以在获取第N个描绘点的坐标后,以该第N个描绘点的坐标为圆心、线宽为直径描绘圆形宽线Cn。所述线宽为当前描绘的宽线的宽度(LineWidth)所包含的像素的个数。
[0023]步骤S102,获取第二描绘点的坐标,并根据所述第一描绘点的坐标、第二描绘点的坐标及线宽计算在先矩形的参数信息。例如,可以在获取第N+1个描绘点的坐标之后,根据第N个描绘点的坐标、第N+1个描绘点的坐标及线宽,计算矩形Ln的长、宽的值及矩形各端点的坐标等参数信息。
[0024]步骤S103,根据所述圆形宽线及在先矩形的参数信息的描绘相应的宽线。例如,可以根据所述圆形宽线Cn与矩形Ln的参数信息来决定在第N个描绘点的坐标、第N+1个描绘点的坐标之间的线段描绘成矩形宽线或在圆形宽线,从而避免对已经描绘过的线段进行
重复描绘。
[0025]作为一个较好的实施例,在获取各描绘点的坐标之后,还可以包括以下步骤:
[0026]判断所述描绘点是否为首端描绘点或末端描绘点;
[0027]若是,则根据该描绘点的坐标及线宽描绘首端或末端的圆形宽线。否则,需要根据该描绘点的坐标、与其相邻的描绘点的坐标及与其相邻的圆形宽线来判断其两者之间宽线的形状。例如,当所述第N个描绘点为当前宽线的第一个描绘点,第N+n个描绘点为当前宽线的最后个描绘点时,则分别以第N个描绘点的坐标与第N+n个描绘点的坐标为圆心、线宽为直径分别进行描绘圆形宽线。如,当第N+1个描绘点既不是首端描绘点,也不是末端描绘点,则可根据第N个描绘点的坐标、第N+1个描绘点的坐标及圆形宽线Cn来确定第N个描绘点与第N+1个描绘点之间的线段通过圆形描绘还是通过矩形。
[0028]作为一个较好的实施例,根据所述圆形宽线及在先矩形的参数信息描绘相应的宽线的过程,具体可以包括以下步骤:
[0029]根据在先矩形的参数信息来构造相应的在先矩形;
[0030]根据所述圆形宽线与在先矩形之间的关系判断所述圆形宽线是否包含了该在先矩形;
[0031]若否,则根据所述在先矩形描绘相应的矩形宽线。若是,则说明该与在先矩形的参数信息相对应的两个描绘点之间的线段已经被圆形宽线覆盖了,因此可以不需要描绘相应的宽线,以免重复描绘。例如所述Cn包含了矩形Ln时,则矩形Ln不需要进行描绘,即不显示,否则显示。
[0032]作为一个较好的实施例,本发明的宽线描绘方法还可以包括以下步骤:
[0033]步骤S104,获取第三描绘点的坐标,根据所述第二描绘点的坐标、第三描绘点的坐标及线宽计算在后矩形的参数信息。例如可以在获取第N+2个描绘点的坐标之后,计算矩形Ln+Ι的参数信息,例如计算第N+1个描绘点与第N+2个描绘点之间的距离Dn+Ι、线宽,并以距离Dn+Ι及线宽为矩形边长、以第N+1个描绘点与第N+2个描绘点之间连线为矩形Ln+1的中线。
[0034]步骤S105,根据所述在后矩形的参数信息构造相应的在后矩形。例如根据所述距离Dn+Ι、线宽及中线的位置构造矩形Ln+1。
[0035]步骤S106,根据所述圆形宽线及在后矩形之间的关系判断所述圆形宽线是否包含了该在后矩形。例如判断圆形宽线Cn是否包含了矩形Ln+Ι。若是,则说明第N个描绘点与第N+1个描绘点之间的线段已经被圆形宽线Cn覆盖,则无需进行描绘。否则,执行步骤S107。
[0036]步骤S107,若否,则根据所述第二描绘点的坐标及线宽描绘圆形宽线。例如可以以第N+1描绘点的坐标为圆心、线宽为直径描绘圆形宽线Cn+1。
[0037]作为一个较好的实施例,在根据所述第二描绘点的坐标及线宽描绘圆形宽线之后,还可以包括以下步骤:
[0038]判断所述根据第二描绘点的坐标及线宽描绘的圆形宽线是否包含了所述在后矩形;此判断过程与所述圆形宽线是否包含了在先矩形的相似,此处不予赘述。如果没有包含,则根据该在后矩形描绘矩形宽线;否则不描绘。例如,当所述圆形宽线Cn没有包含所述矩形Ln+Ι,则需要描绘该矩形Ln+Ι,以保证线段的连贯性,否则不需要描绘Ln+Ι,以免重复描绘。
[0039]作为一个较好的实施例,根据所述圆形宽线与相应的矩形之间的关系判断所述圆形宽线是否包含了相应的矩形的过程具体可以包括以下步骤:
[0040]判断所述圆形宽线是否与矩形中两个包含了相应描绘点的边均相交;
[0041]若否,则说明其中至少一个边落在在圆形宽线之外,判定所述圆形宽线不包含相应的矩形。例如,当矩形Ln+Ι中包含了第N个描绘点的边落在了圆形宽线Cn之外,则说明圆形宽线Cn没有包含矩形Ln+Ι。若是,则说明该圆形宽线可能包括相应的矩形宽线,也可能不包括,需要另外的计算过程来确定。
[0042]作为一个较好的实施例,根据所述圆形宽线与相应的矩形之间的关系判断所述圆形宽线是否包含了该相应的矩形的过程具体还可以包括以下步骤:
[0043]当所述圆形宽线与矩形中两个包含了相应描绘点的边均相交时,则获取圆形宽线与相应的矩形之间的交点坐标;例如,矩形Ln+Ι中的两个分别包含了第N个描绘点与第N+1个描绘点的均与圆形宽线Cn相交的情况。获取矩形Ln+Ι中包含了第N+1个描绘点的边与圆形宽线Cn的交点坐标。[0044]在获取上述交点坐标之后,计算该矩形包含了所述交点坐标的边所伸出在所述圆形宽线之外的长度大小;例如计算所述矩形包含了第N+1个描绘点的边伸出圆形宽线Cn的长度。
[0045]判断所述长度是否大于或等于预定值;若否,则判定所述圆包含相应的矩形。
[0046]实施例二
[0047]参照图2所示,以下以由鼠标采样到线的3个相邻的描绘点为例对本发明的宽线描绘方法进行说明:P1、P2、P3代表了由鼠标采样到线的3个相邻的描绘点,假设Pl是第一个描绘点,依次是P2,再次是P3。
[0048]获取当前描绘宽线的第一个描绘点Pl的坐标:以Pl坐标为圆心,Lineffidth为直径描绘圆Cl。获取第二个描绘点P2的坐标。计算第一个描绘点Pl和第二个描绘点P2之间的距离dl,以dl为宽、LineWidth长构造长方形LI。若该长方形LI被所述圆Cl所包含,则该矩形可以不进行描绘,即可以不显示该矩形;否则,描绘该矩形,例如可以通过多边形填充的方式对矩形进行填充,使其显示为的当前描绘宽线的一部分。
[0049]判断长方形LI是否需要进行描绘的过程具体可以包括:
[0050]如果dl>=LineWidth/2,以描绘点Pl和P2为中线,长为LineWidth,宽为dl,描绘长方形LI,如图2中的虚线表示的四边形所示。该长方形LI上下两边和圆相切,包含了描绘点Pl和P2的两个边中的一个边落在在圆形宽线Cl之外。R表示圆的半径,等于LineWidth/2。
[0051]如果dl〈LineWidth/2,则所述描绘点Pl和P2的两个边均与圆形宽线Cl相交,用上述方法构造长方形LI,此时的长方形LI不一定显示。计算长方形LI中包含了描绘点Pl的边和圆形宽线Cl的交点,并获取该边伸出了圆形宽线Cl的长度dl_l的大小,如果dl_l>=l,则该长方形LI需要显示,其中I表示I个象素;否则,dl_l〈l,则不需要显示。意义是当描绘点PU描绘点P2之间的距离比较小时,由于以该两点构成的长方形的大部分区域都被包含在圆形宽线Cl中,因此该长方形不需要进行显示。
[0052]判断长方形L2是否需要进行描绘的过程具体可以包括:
[0053]获取下一个描绘点P3,进行与前一个描绘点间线段的处理,即进行描绘点P2和P3之间的线段描绘过程可以包括:
[0054]以描绘点P2、P3为中线,构造长方形L2而不一定要显示。获取该长方形L2和上一个圆形宽线Cl的交点,并计算出dl_2的长度;
[0055]如果dl_2>=l,则说明圆形宽线Cl没有包含该长方形L2,因此需要以描绘点P2的坐标为圆心,LineWidth为直径构造一个圆圆形宽线C2,这种情况下,还需要判断描绘点P3和P2构成的长方形L2是否在圆形宽线C2内,若在则不需要描绘长方形L2,否则描绘;具体的判断过程可以与判断长方形LI是否需要进行描绘的过程相同,此处不予赘述。
[0056]如果dl_2〈l,则描绘点P2不需要描绘圆形宽线C2,则需要判断描绘点P3和P2构造的长方形L2是否在上一次描绘的圆形宽线C2内,若在则不描绘长方形L2,否则描绘。
[0057]以上就处理完了相邻的3个描绘点P1、P2及P3间的宽线的描绘,依次类推,判断长方形L2是否需要进行描绘的过程,逐步进行后续个描绘点,处理直到末端描绘点(即:最后一个描绘点),并以末端描绘点的坐标为圆心,Lineffidth为半径构造并显示一个圆形宽线。[0058]实施例三
[0059]与上述实施例一中的一种宽线描绘方法相对应,本实施例中还提供一种宽线描绘装置,如图3所示,包括:
[0060]第一描绘模块101,用于获取第一描绘点的坐标,根据第一描绘点的坐标、线宽描绘圆形宽线;
[0061]第一计算模块102,用于获取第二描绘点的坐标,并根据所述第一描绘点的坐标、第二描绘点的坐标及线宽计算在先矩形的参数信息;
[0062]第二描绘模块103,用于根据所述圆形宽线及在先矩形的参数信息描绘相应的宽线。
[0063]作为一个较好的实施例,所述宽线描绘装置可以包括:
[0064]第二计算模块,用于获取第三描绘点的坐标,根据所述第二描绘点的坐标、第三描绘点的坐标及线宽计算在后矩形的参数信息;
[0065]矩形构造模块,用于根据所述在后矩形的参数信息构造相应的在后矩形;
[0066]第一判断模块,用于根据所述圆形宽线及在后矩形之间的关系判断所述圆形宽线是否包含了该在后矩形;
[0067]第一子描绘模块,用于在所述第一判断模块的判断结果为否的情况下,根据所述第二描绘点的坐标及线宽描绘圆形宽线。
[0068]作为一个较好的实施例,所述第一子描绘模块可以包括:
[0069]第二判断模块,用于判断所述根据第二描绘点的坐标及线宽描绘的圆形宽线是否包含了所述在后矩形;
[0070]第一子描绘模块,用于在所述第二判断模块的判断结果为否的情况下,根据该在后矩形描绘矩形宽线。
[0071]可以理解,本发明所使用的术语“第一”、“第二”等可在本文中用于描述各种元件,但这些元件不受这些术语限制。这些术语仅用于将第一个元件与另一个元件区分。举例来说,在不脱离本发明的范围的情况下,可以将第一描绘模块称为第二描绘模块,且类似地,可将第二描绘模块称为第一描绘模块。第一描绘模块和第二描绘模块两者都是描绘模块,但其不是同一描绘模块。
[0072]本实施例中的一种宽线描绘装置的其它技术特征与本发明实施例一中的一种宽线描绘方法相同,此处不予赘述。
[0073]通过以上方案可以看出,本发明的一种宽线描绘方法及装置,通过第一描绘点的坐标与线宽描绘圆形宽线,并通过第一描绘点的坐标、第二描绘点的坐标及线宽计算在先矩形的参数信息,然后根据所述圆形宽线及在先矩形的参数信息在各相邻两个描绘点之间描绘相应的宽线,从而描绘出一个完整的宽线。由于本发明通过圆形宽线与在先矩形的参数信息来确定相邻两个描绘点之间的宽线,从而避免了对已经描绘过的线段的重复描绘,减少了需要处理的数据量,提高了宽线描绘的速度与流畅度。
[0074]需要说明的是,除非上下文另有特定清楚的描述,本发明中的元件和组件,数量既可以单个的形式存在,也可以多个的形式存在,本发明并不对此进行限定。另外,本发明中的步骤虽然用标号进行了排列,但并不用于限定步骤的先后次序,除非明确说明了步骤的次序或者某步骤的执行需要其他步骤作为基础,否则步骤的相对次序是可以调整的。[0075]以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
【权利要求】
1.一种宽线描绘方法,其特征在于,包括以下步骤: 获取第一描绘点的坐标,根据第一描绘点的坐标与线宽描绘圆形宽线; 获取第二描绘点的坐标,并根据所述第一描绘点的坐标、第二描绘点的坐标及线宽计算在先矩形的参数信息; 根据所述圆形宽线及在先矩形的参数信息描绘相应的宽线。
2.根据权利要求1所述的宽线描绘方法,其特征在于,在获取各描绘点的坐标之后,还包括以下步骤: 判断所述描绘点是否为首端描绘点或末端描绘点; 若是,则根据该描绘点的坐标及线宽描绘首端或末端的圆形宽线。
3.根据权利要求2所述的宽线描绘方法,其特征在于,根据所述圆形宽线及在先矩形的参数信息描绘相应的宽线的过程包括以下步骤: 根据在先矩形的参数信息来构造相应的在先矩形; 根据所述圆形宽线与在先矩形之间的关系判断所述圆形宽线是否包含了该在先矩形; 若否,则根据所述在先矩形描绘相应的矩形宽线。
4.根据权利要求1所述的宽线描绘方法,其特征在于,还包括以下步骤: 获取第三描绘点的坐标,根据所述第二描绘点的坐标、第三描绘点的坐标及线宽计算在后矩形的参数信息; 根据所述在后矩形的参数信息构造相应的在后矩形; 根据所述圆形宽线及在后矩形之间的关系判断所述圆形宽线是否包含了该在后矩形; 若否,则根据所述第二描绘点的坐标及线宽描绘圆形宽线。
5.根据权利要求4所述的宽线描绘方法,其特征在于,在根据所述第二描绘点的坐标及线宽描绘圆形宽线之后,还包括以下步骤: 判断所述根据第二描绘点的坐标及线宽描绘的圆形宽线是否包含了所述在后矩形; 若否,则根据该在后矩形描绘相应的矩形宽线。
6.根据权利要求3-5任意一项所述的宽线描绘方法,其特征在于,判断所述圆形宽线是否包含了相应的矩形的过程包括以下步骤: 判断所述圆形宽线是否与矩形中两个包含了相应描绘点的边均相交; 若否,则判定所述圆形宽线不包含相应的矩形。
7.根据权利要求6所述的宽线描绘方法,其特征在于,判断所述圆形宽线是否包含了该相应的矩形的过程还包括以下步骤: 当所述圆形宽线与矩形中两个包含了相应描绘点的边均相交时,获取所述圆形宽线与相应的矩形之间的交点坐标; 计算该矩形包含了所述交点坐标的边所伸出在所述圆形宽线之外的长度大小; 判断所述长度是否大于或等于预定值; 若否,则判定所述圆包含相应的矩形。
8.一种宽线描绘装置,其特征在于,包括: 第一描绘模块,用于获取第一描绘点的坐标,根据第一描绘点的坐标与线宽描绘圆形宽线; 第一计算模块,用于获取第二描绘点的坐标,并根据所述第一描绘点的坐标、第二描绘点的坐标及线宽计算在先矩形的参数信息; 第二描绘模块,用于根据所述圆形宽线及在先矩形的参数信息描绘相应的宽线。
9.根据权利要求8所述的宽线描绘装置,其特征在于,还包括: 第二计算模块,用于获取第三描绘点的坐标,根据所述第二描绘点的坐标、第三描绘点的坐标及线宽计算在后矩形的参数信息; 矩形构造模块,用于根据所述在后矩形的参数信息构造相应的在后矩形; 第一判断模块,用于根据所述圆形宽线及在后矩形之间的关系判断所述圆形宽线是否包含了该在后矩形; 第一子描绘模块,用于在所述第一判断模块的判断结果为否的情况下,根据所述第二描绘点的坐标及线宽描绘圆形宽线。
10.根据权利要求9所述的宽线描绘装置,其特征在于,所述第一子描绘模块包括: 第二判断模块,用于判断所述根据第二描绘点的坐标及线宽描绘的圆形宽线是否包含 了所述在后矩形; 第二子描绘模块,用于在所述第二判断模块的判断结果为否的情况下,根据该在后矩形描绘矩形宽线。
【文档编号】G06T11/20GK103646412SQ201310744130
【公开日】2014年3月19日 申请日期:2013年12月27日 优先权日:2013年12月27日
【发明者】陈泓坤 申请人:广东威创视讯科技股份有限公司