发明内容
本发明实施例提供一种对渐变图元对象进行陷印处理的方法及装置,以解决现有技术中对渐变图元对象进行陷印处理的准确性较差的问题。
一种对渐变图元对象进行陷印处理的方法,包括:
将渐变图元对象与其他图元对象相交形成的相交路径划分为多条折线段;
为所述渐变图元对象生成三角形网格,确定出所述多条折线段与所述三角形网格的交点并保存;
针对每一条折线段,确定出该折线段的扫描步长,并以该扫描步长沿着该折线段路径进行扫描得到多个扫描段;根据所述交点确定出各扫描段的颜色值,并确定出所有相邻扫描段的颜色梯度值;根据各颜色梯度值确定出所述折线段的陷印区间;
对所述陷印区间填充颜色并输出陷印效果。
一种对渐变图元对象进行陷印处理的装置,包括:
折线段确定单元,用于将渐变图元对象与其他图元对象相交形成的相交路径划分为多条折线段;
交点获取单元,用于为所述渐变图元对象生成三角形网格,确定出所述多条折线段与所述三角形网格的交点并保存;
陷印处理单元,用于针对每一条折线段,确定出该折线段的扫描步长,并以该扫描步长沿着该折线段路径进行扫描得到多个扫描段;根据所述交点确定出各扫描点的颜色值,并确定出所有相邻扫描段的颜色梯度值;根据各颜色梯度值确定出所述折线段的陷印区间;
陷印效果输出单元,用于对所述陷印区间填充颜色并输出陷印效果。
本发明实施例中,将相交路径划分成多条折线段,再针对每一条折线段进行陷印处理,从而从整体上提高了对渐变图元对象进行陷印处理的准确性;并且,针对每一条折线段,确定出该折线段的扫描步长,并以该扫描步长对该折线段进行扫描得到多个扫描段,并根据所有相邻扫描段的颜色梯度值确定出该折线段的陷印区间,从而更进一步的提高了对渐变图元对象进行陷印处理的准确性,提高了陷印效果与渐变图元对象的渐变颜色的吻合度。
具体实施方式
下面结合说明书附图对本发明实施例进行详细的描述。
参见图1,为本发明实施例中对渐变图元对象进行陷印处理的方法流程图,该流程包括以下步骤:
步骤101、确定出需要进行陷印处理的渐变图元对象与其他图元对象相交所形成的相交路径,并将该相交路径折线化,划分成多条折线段。
步骤102、为该渐变图元对象生成三角形网格;为每个折线段建立对应的链表,确定出各折线段与该三角形网格的交点,并将该交点分别存储至对应的链表中。
步骤103、针对每一条折线段,确定出折线段的扫描步长,并以该扫描步长沿着该折线段路径进行扫描得到多个扫描点,该多个扫描点将该折线段划分成多个扫描段;根据该折线段与三角形网格的交点确定出扫描点的颜色值,并根据扫描点的颜色值确定出各扫描段的颜色值;根据各扫描段的颜色值确定出所有相邻扫描段的颜色梯度值,并根据各颜色梯度值确定出折线段的陷印区间。
步骤105、在确定出所有折线段的陷印区间之后,对陷印区间填充颜色并输出陷印效果。
较佳地,由于渐变图元对象的颜色变化可能会产生数量较多的陷印区间,在不影响陷印效果的前提下,为减低陷印处理所消耗的资源,在上述流程的步骤103与步骤105之间还包括以下步骤:
步骤104、针对每一个相邻陷印区间,若该相邻陷印区间的位置差值低于设定的位置阈值,且颜色差值低于设定的颜色阈值,则将该相邻陷印区间合并成一个陷印区间。
本发明技术方案主要适用于对渐变类型为渐变类型4或渐变类型5的渐变图元对象进行陷印处理,但该技术方案中的部分技术特征(如沿路径扫描划分陷印区间等)并不仅限应用于该两种渐变类型的渐变图元对象,还可以是其他渐变类型的渐变图元对象。
上述流程步骤101中,相交路径为页面上其他图元对象与该渐变图元对象相交的边界路径(该边界路径为曲线状,如图2中的曲线所示),该边界路径在用户空间坐标下进行描述,相交路径的两侧的图元对象既可以是为独立的两个图元对象(如图像、文字等),也可以是复合对象(复合对象为多个对象叠加所构成为对象),构成复合对象中的多个对象中,除最底层的对象之外的所有对象都包含有叠印参数,叠印参数控制当前对象中的点与该对象下方的对应点的颜色的叠加方式,叠加方式包括非零叠印和普通叠印。将相交路径折线化具体实现方式为:如图2所示,将相交路径AB划分为多条首尾端点依次相连的折线段(如折线段lA1、l12、l23......、l10B),每条折线段在距离阈值的控制下尽可能的逼近原有相交路径的曲线状态,如每条折线段对应相交路径上的一段曲线段,该曲线段的所有点到该折线段的垂直距离的最大值低于设定的距离阈值,距离阈值的取值大小根据实际的应用情况设定。前述用户空间坐标是指PDF文件中所定义的坐标空间,所有页面图元对象的位置都是指在该用户空间中的位置。针对渐变图元对象其自身具有相应的坐标空间时,在对该渐变图元对象进行陷印处理时,需要将该用户空间坐标转换成渐变图元对象的坐标空间。
上述流程步骤102中,为该渐变图元对象生成的三角形网格(该三角形网格呈线性或非线性的颜色变化)如图3所示,在PDF文件中,网格中的三角形的排列顺序是自下向上的,即先绘制的三角形先被定义,由于三角形之间可能存在相互覆盖的情况,若继续采用这种自下而上的方式定义三角形则可能会导致相交路径与先绘制的三角形的交点无效;因此,本发明实施例中为提高相交路径与三角形交点的有效性,采用三角形逆序定义的方式定义三角形,如后绘制的三角形先定义,定义好三角形之后,将各三角形的参数信息(参数信息包括三角形的三个顶点的坐标值、颜色值等)保存至管理器中。在对渐变图元对象进行陷印处理之前,初始化管理器,对渐变图元对象进行陷印处理之后,释放管理器中存储的所有信息。
较佳地,为进一步提高确定相交路径与三角形的交点的效率,在对渐变图元对象进行陷印处理之前,先确定出相交路径所经过的所有三角形,并将确定出的三角形作为一个集合中的元素,再初始化管理器。
该步骤中,确定出相交路径与网格中的三角形的交点的具体实现方式如下:针对相交路径中的每一条折线段,折线段与三角形有三种关系,如图4b、4c、4d所示,分别为折线段lab与三角形相交、折线段lab在三角形内、折线段lab在三角形外,其中前两种关系表示该折线段与该三角形具有交点,第三种关系表示折线段与三角形没有交点。本发明实施例通过定义位置参数来判断折线段与三角形的上述三种关系;首先确定出折线段所经过的三角形,当折线段与其中一个三角形的某条三角形边求交时,定义折线段的位置参数为TL(即折线段的起点到交点(该交点为该折线段与三角形的交点)的距离与该折线段长度的比值),该TL值也称为该折线段与该三角形边相交的交点所对应的TL值,当TL等于0时,交点与折线段的起点重合,当TL等于1时,交点与折线段的终点重合;同理,定义该三角形边的位置参数为TE(即三角形边的起点到交点的距离与该三角形边长度的比值),该TE值也可以称为该折线段与三角形边相交的交点所对应的TE值,当TE等于0时,交点与三角形边的起点重合,当TE等于1时,交点与三角形边的终点重合。如图4a所示,折线段lab分别与三角形的三角形边lAB、lCA相交于两点,由于三角形的顶点A、B、C以及折线段lab的起点与终点a、b的坐标点都是已知的,因此,可确定出线段lAB、lCA、lab在坐标平面的直线方程表达式,从而可利用平面直线方程确定出线段lab分别与线段lAB、lCA的交点的坐标值,从而可以得到折线段lab在与三角形边lAB求交时的位置参数TLab,折线段lab在与三角形边lCA求交时的位置参数TLca,三角形边lAB、lCA的位置参数分别为TEAB、TECA;当0<TLab<1且0<TLca<1,或者0<TEAB<1且0<TECA<1时,则判断该折线段lab与三角形相交于两点,如图4a所示;当TLab<0且TLca>1,或者0<TEAB<1且0<TECA<1时,则判断该折线段lab在三角形内,如图4c所示;当TEBC>1且TECA<0时,则判断该折线段lab在三角形外,如图4d所示。
该步骤中,针对每一条折线段都设置有对应的链表(该链表可以是单向链表),在对折线段与三角形网格求交时,建立该链表,并将确定出的交点按照一定的方式存储至该链表中的相应节点中,在对该折线段进行扫描处理之后,释放该链表,以节省存储资源,进一步提高陷印处理效果。将该折线段与三角形网格的交点以链表形式保存,具体实现方式为:在链表中,根据各交点对应的TL值,按照从小到大的顺序将该交点保存至链表中头节点到末节点的方向上的相应节点中,交点与链表中的节点一一对应,各节点中存储有对应交点的参数信息(参数信息包括该交点的颜色值、该交点对应的TE值、该交点对应的TL值)。当折线段的起点或终点在三角形内时,则确定该折线段的起点或终点即为该折线段对应的交点,取该交点的TL值为0或者1,并将该交点插入到链表中;其他交点按照其对应的TL值插入到链表中;若某一交点对应的TL值与链表中已经保存的交点对应的TL相同,则丢弃该交点,保留已经保存的交点;链表中存储的任意两个相邻交点之间不再插入新的交点;当链表的头节点保存的交点的TL值为0,末节点保存的交点的TL值为1时,则表示链表生成完毕,不再继续遍历该相交路径与三角形网格中其他三角形节点。本发明实施例中可采用线性插值法确定出每个交点的颜色值,以确定图4a中的交点a的颜色值为例进行详细说明,折线段lab与三角形边lAB的交点为a,假设顶点A、B的颜色值分别为YA、YB,则确定出交点a的颜色值Ya=YA+YEab×(YB-YA)。
上述流程步骤103中,确定出折线段的扫描步长,具体实现方式如下:针对每一条折线段,根据实际应用情况,设定长度阈值(在该长度阈值范围内渐变颜色无变化,以至于不会丢掉渐变颜色的变化细节)与最小颜色阈值(该最小颜色阈值为一个颜色的相似度,相似度范围内的颜色值相同);将该折线段的长度与该长度阈值的比值取整确定为第一分段数,将该折线段对应的交点中,根据相邻交点的颜色值变化量,将相邻交点中颜色值变化量最大的颜色变化值与该最小颜色阈值的比值取整确定为第二分段数;比较第一分段数与第二分段数,取两者之中取值较大的分段数值确定为折线段的分段数N。将折线段在X轴方向上的长度分量dx除以该折线段的分段数N即可得到在X轴方向上的扫描步长,将该折线段在Y轴方向上的长度分量dy除以该折线段的分段数N即可得到在Y轴方向上的扫描步长。结合图5a与图5b对本发明实施例扫描相交路径进行详细的说明,如图5a所示,折线段lab与X轴的夹角θ小于45°时,扫描该折线段的扫描方向为X轴方向,取折线段lab在X轴方向上的扫描步长,在折线段lab上以步长dl=dx/(N×Cosθ)沿着折线段lab进行扫描,并得到多个扫描点(如图5a中的点51、52、53);如图5b所示,若折线段lab与X轴的夹角θ大于等于45°时,扫描该折线段的扫描方向为Y轴方向,取折线段lab在Y轴方向上的扫描步长,在折线段lab上以步长dl=dy/(N×Sinθ)沿着折线段lab进行扫描,并得到多个扫描点(如图5b中的点51’、52’、53’)。
上述流程步骤103中,确定出各扫描点的颜色值,具体实现方式如下:针对每一个扫描点,根据该扫描点的坐标值从链表中定位出交点区间,再根据该交点的颜色值,利用线性差值算法得到该扫描点的颜色值。
该步骤中,根据各扫描点的颜色值确定出该相交路径的陷印区间具体为:结合图6a、6b、6c可知,假设折线段lab上有11个扫描点,分别为S1、S2......、S11,该11个扫描点将折线段划分为12线段(后续称为扫描段,位于同一扫描段上的路径点的颜色值相同),从折线段lab的起点a开始,各扫描段的颜色值依次为Yas1、Ys1s2、Ys2s3......、Ys10s11、Ys11sb,确定出所有相邻扫描段的颜色梯度值,并判断每个相邻扫描段的颜色梯度值是否小于设定的梯度阈值,若是,则认为该相邻扫描段的颜色没有发生跳变属于同一陷印区间(同一个陷印区间中的所有点的颜色值相同),将该相邻扫描段划分到同一个陷印区间;否则,认为该相邻扫描段的颜色发生了跳变属于不同的陷印区间,将该相邻扫描段划分到不同的陷印区间,依次,即可得到如图6b所示的多个陷印区间(如陷印区间11、陷印区间12......、陷印区间23)。本发明实施例中,确定相邻扫描段的颜色梯度值的具体实现方式如下:设该相邻扫描段的颜色分别为Y1、Y2,颜色的各个色版分别为C1、C2、C3......、Cn,则得到相邻扫描段的颜色梯度值(用Grade表示)如式(1)所示:
Grade=MAX(ABS(Y1.C1-Y2.C1),ABS(Y1.C2-Y2.C2),...,ABS(Y1.Cn-Y2.Ch)) 式(1)
式(1)中,Grade为相邻扫描段的颜色梯度值,ABS()的含义是取绝对值。
由于渐变的颜色是连续变化的,因此,在设置梯度阈值时,不需要将该梯度阈值设置的较大,以免丧失颜色细节,因此,本发明实施例中设置梯度阈值的取值范围为[0.001,0.005]。
较佳地,一般情况下,折线段的一侧至少有一个渐变图元对象参与陷印处理,当折线段的其中一侧参与陷印的对象超过两个时,表明该侧的渐变图元对象中含有叠印参数,在确定该折线段两侧的渐变图元对象的颜色值时,需要考虑叠印参数。
上述流程的步骤104中,判断相邻陷印区间的位置差值与颜色差值,当该位置差值在设定的位置阈值内,且颜色差值在颜色阈值范围内时,将该两个相邻陷印区间合并成一个陷印区间,如图6b所示,将陷印区间11、12、13合并成一个陷印区间(即图中的陷印区间1),将陷印区间21、22、23合并成一个陷印区间(即图中的陷印区间2);再对合并后的陷印区间填充颜色,并输出陷印效果,如图6c所示。本发明实施例中的位置阈值与颜色阈值可根据实际应用设置,一般情况下都设置在0.001之内。
上述流程步骤105中,对陷印区间填充颜色并输出陷印效果,具体为:在陷印区间中填充颜色,该颜色根据陷印规则(可根据现有较为常规的方式确定)确定,将该渐变图元对象以陷印区间为中心线,陷印宽度为宽的多边形,并将该陷印结果作为图形填充对象输出。
基于上述流程相同的构思,本发明实施例还提供一种对渐变图元对象进行陷印处理的装置,该装置包括折线段确定单元71、交点获取单元72、陷印处理单元73以及陷印效果输出单元74,其中:
折线段确定单元71,用于将渐变图元对象与其他图元对象相交形成的相交路径划分为多条折线段。
折线段确定单元71将相交路径划分成多条折线段的方式如前所述流程步骤101的方式一致,在此不再赘述。
交点获取单元72,用于为该渐变图元对象生成三角形网格,确定出多条折线段与该三角形网格的交点,并以链表形式保存交点。
交点获取单元72如何确定出折线段与三角形网格的交点以及如何在链表中保存交点的方式,与前所述流程步骤102描述的方式一致,在此不再赘述。
陷印处理单元73,用于针对每一条折线段,确定出该折线段的扫描步长,并以该扫描步长沿着该折线段路径进行扫描得到多个扫描段;根据该折线段与三角形网格的交点确定出各扫描段的颜色值,并确定出所有相邻扫描段的颜色梯度值;根据各颜色梯度值确定出该折线段的陷印区间。
陷印处理单元73包括扫描处理子单元731与陷印处理子单元732,其中:
扫描处理子单元731,用于针对每一条折线段,确定出该折线段的扫描步长,并以该扫描步长沿着该折线段路径进行扫描得到多个扫描点,该多个扫描点将所述折线段划分成多个扫描段;
陷印处理子单元732,用于根据该折线段与三角形网格的交点确定出扫描点的颜色值,并根据各扫描点的颜色值确定出相邻扫描段的颜色梯度值;根据相邻扫描段的颜色梯度值确定出该折线段的陷印区间。
较佳地,该陷印处理单元还包括合并处理子单元733,其中:
合并处理子单元733,用于在陷印处理子单元732确定出各折线段对应的陷印区间之后,判断任意两个相邻陷印区间的位置差值与颜色差值,当位置阈值低于设定的位置阈值,且颜色差值低于设定的颜色阈值时,将该两个相邻陷印区间合并成一个陷印区间。
陷印效果输出单元,用于对各陷印区间填充颜色,并输出陷印效果。
采用本发明实施例提供的技术方案,一方面,将相交路径划分成多条折线段,再针对每一条折线段进行陷印处理,从而从整体上提高了对渐变图元对象进行陷印处理的准确性;进一步的,针对每一条折线段,确定出该折线段的扫描步长,并以该扫描步长对该折线段进行扫描得到多个扫描段,并根据各扫描段的颜色值确定出所有相邻扫描段的颜色梯度值,再根据各颜色梯度值确定出该折线段的陷印区间,从而更进一步的提高了对渐变图元对象进行陷印处理的准确性;另一方面,在为渐变图元对象生成三角形网格之后,针对每条折线段,为该折线段配置对应的链表,将该折线段与三角形网格的交点保存至对应的链表中,该链表中的每个节点存储有相应交点的参数信息(如颜色值、对应的TL值、TE值等),因而在后续进行路径扫描、陷印区间划分时,可通过遍历链表获取到当前扫描的路径点所在的交点区间,即可确定出该路径点的颜色值,而不需要再重新遍历三角形网格来确定路径点的颜色值,从而在一定程度上提高了对渐变图元对象进行陷印处理的速率。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。