具体实施方式
下面将参考附图并结合实施例,来详细说明本发明。
图1示出了根据本发明实施例的用于页面的光栅化处理方法的流程图,包括:
步骤S10,从获取原始透明区域;
步骤S20,对获取的位于原始透明区域之内的图元对象进行去透明处理,以生成最终透明区域;
步骤S30,在光栅化处理中,对最终透明区域进行混色运算。
本实施例中利用对象区域的处理确定了最终透明区域,且仅对透明区域进行混色运算,所以相对于现有技术,显著减少了需要计算的数据量,从而降低了运算量,提高了光栅化处理效率。
本发明的一个优选实施例提供了页面原始透明区域的确定方案,包括以下步骤:
在扫描原始指令文件生成中间指令文件的同时,对具有透明属性的图元对象所占轮廓区域进行记录,分别合并存入对应的页面分块的中间指令文件中,最终确定出整个页面上所有透明图元对象占据的区域,称之为页面的原始透明区域。
页面原始透明区域并不是精确的页面最终透明区域,只是一个大致的轮廓区域,因而其生成并不需消耗太多时间,尤其在最终透明区域在整个页面所占比例较小的情况下,将“降透明处理”限定在原始透明区域可以极大地提高处理的效率。
图2示出了根据本发明优选实施例的对获取的位于原始透明区域之内的图元对象进行去透明处理的流程图,包括:
2.1-2.4)确定当前分块中的当前图元透明轮廓区域;
2.4.4.2-2.4.4.4)根据当前图元对象的透明属性进行相应的处理。
图3示出了根据本发明优选实施例的确定当前分块中的当前图元透明轮廓区域的流程图。本优选实施例通过生成碎片链表(即一种具有链接结构的碎片列表),从而提高了数据处理效率,具体包括以下步骤:
步骤S310,确定页面原始透明区域,记录到中间指令文件中;
步骤S320,扫描中间指令文件,对位于原始透明区域之内的图元对象分类进行轮廓区域求交处理,生成图形或图像类型的碎片链表;
步骤S330,利用碎片链表记录页面的最终透明区域。
图4示出了根据本发明优选实施例的处理当前图元对象的透明轮廓区域的流程图,通过扫描中间指令文件,对于顺序取出的每一个图元对象,作如下处理:
2.1)获得当前图元对象所占的轮廓区域,记为Ao,o为图元对象的索引;
2.2)设置当前图元对象的相关属性,包括对象ID、对象类型、颜色信息和透明组信息;
2.3)若当前图元对象位于透明组内,则将Ao相对于透明组的坐标转换为物理页面坐标,如果当前图元对象不位于透明组内,则本身就是物理页面坐标,无需做转换处理;
2.4)处理当前图元对象的透明轮廓区域。
图5示出了根据本发明优选实施例的按页面分块处理当前图元对象的透明轮廓区域的流程图,包括以下步骤:
2.4.1)将Ao与页面原始透明区域求交,若交集区域非空,则将交集区域设置为新的Ao;
2.4.2)将当前图元对象保存到图元对象列表中;
2.4.3)确定与Ao有交集的页面分块的起止索引号;即确定Ao在哪些页面分块中。
然后,可以顺序遍历上述交集非空的页面分块,将Ao与页面分块中的原始透明区域求交,若交集区域非空,则如图2所示,作如下处理:
2.4.4.1)将交集区域设置为Ao在当前页面分块k中的值,记为Ao-k,k为页面分块的索引;
2.4.4.2)处理当前图元对象是复杂透明的情况;
2.4.4.3)处理当前图元对象是不透明的情况;
2.4.4.4)处理当前图元对象是简单透明的情况,其中又分为两种情况:
2.4.4.4.1)处理当前图元对象是简单透明且当前图元对象是图形类型的情况;
2.4.4.4.2)处理当前图元对象是简单透明且当前图元对象是图像类型的情况。
如图6所示2.4.4.2)对于当前图元对象是复杂透明的情况,作如下处理:
2.4.4.2.0)遍历当前页面分块k中的碎片链表,当前碎片的轮廓区域记为Af-k,f为碎片的索引;
2.4.4.2.1)令Ai为Ao-k与Af-k的交集,若Ai为空,则判断是否已经遍历完碎片链表,没有则继续遍历,否则结束遍历,若Ai非空,则作如下处理:
2.4.4.2.1.0)判断Ai是否等于Af-k;
2.4.4.2.1.1)如果是,说明Af-k完全被Ao-k包含,于是Af-k将完全被Ao-k覆盖(替代),则将Af-k对应的碎片从当前碎片链表中删除,然后判断是否已经遍历完碎片链表,没有则继续遍历,否则结束遍历;
2.4.4.2.1.2)否则:将Ai从Af-k中删除,然后,
2.4.4.2.1.3)判断Ai是否等于Ao-k,
2.4.4.2.1.3.1)如果是,说明Ao-k完全被Af-k包含,再不可能与其他碎片的区域相交(碎片之间都是不相交的),则应停止对当前碎片链表的遍历,否则,然后判断是否已经遍历完碎片链表,没有则继续遍历,否则结束遍历;
2.4.4.2.2)遍历结束后,将Ao-k合并入最终透明区域;
需要说明的是,复杂透明的定义可以根据需要进行修改和扩充,例如,可以将具有变数的透明度参数描述的透明属性定义为复杂透明,或者将具有两种以上颜色值的透明属性定义为复杂透明。
如图7所示,2.4.4.3)对于当前图元对象是不透明的情况,作如下处理:
2.4.4.3.0)判断Ao-k与最终透明区域的交集是否非空;
2.4.4.3.1)若非空,则从当前的最终透明区域中删除交集部分,然后前进到步骤2.4.4.3.2;若空,就直接到步骤2.4.4.3.2;
2.4.4.3.2)遍历当前页面分块k中的碎片链表,当前碎片的轮廓区域记为Af-k;
2.4.4.3.3)令Ai为Ao-k与Af-k的交集,若Ai为空,则判断是否已经遍历完碎片链表,没有则继续遍历,否则结束遍历,若Ai非空,则作如下处理:
2.4.4.3.3.0)判断Ai是否等于Af-k;
2.4.4.3.3.1)若Ai等于Af-k,说明Af-k完全被Ao-k包含,于是Af-k将完全被Ao-k覆盖(替代),则将Af-k对应的碎片从当前碎片链表中删除,然后判断是否已经遍历完碎片链表,没有则继续遍历,否则结束遍历;
2.4.4.3.3.2)否则将Ai从Af-k中删除;
2.4.4.3.3.3)判断Ai是否等于Ao-k,
2.4.4.3.3.3.1)若Ai等于Ao-k,说明Ao-k完全被Af-k包含,再不可能与其他碎片的区域相交(碎片之间都是不相交的),则应停止对当前碎片链表的遍历;
2.4.4.3.3.3.2)否则判断是否已经遍历完碎片链表,没有则继续遍历,否则结束遍历;
2.4.4.3.4)因当前图元对象是不透明的,当遍历完当前碎片链表之后,Ao-k不会有任何变化,故可作为一个新的不透明的碎片插入碎片链表中,该新的碎片的轮廓区域为Ao-k,该新的碎片的对象层列表为o。
如图8所示,2.4.4.4)对于当前图元对象是简单透明的情况,作如下处理:
2.4.4.4.1)对于当前图元对象是图形类型的情况,作如下处理:
2.4.4.4.1.0)判断Ao-k与最终透明区域的交集是否非空;
2.4.4.4.1.1)若非空,则从Ao-k中删除交集部分,然后前进到步骤2.4.4.4.1.2,若Ao-k与最终透明区域的交集是空集,则直接前进到步骤2.4.4.4.1.2;
2.4.4.4.1.2)判断Ao-k是否非空,如果为空,则退出对当前碎片链表的遍历;
2.4.4.4.1.2.0)如果非空,则遍历当前页面分块k中的碎片链表,当前碎片的轮廓区域记为Af-k;
2.4.4.4.1.2.1)令Ai为Ao-k与Af-k的交集,若Ai为空,则判断是否已经遍历完碎片链表,没有则继续遍历,否则结束遍历,若Ai非空,则作如下处理:
2.4.4.4.1.2.2)判断Ai是否等于Af-k;
2.4.4.4.1.2.2.1)若Ai等于Af-k,说明Af-k完全被Ao-k包含,则判断Af-k对应的碎片是否为图像类型,
2.4.4.4.1.2.2.1.1)是则将Af-k对应的碎片从当前碎片链表中删除;
2.4.4.4.1.2.2.1.2)将Ai合并入最终透明区域;
2.4.4.4.1.2.2.1.3)否则将当前图元对象加入Af-k对应的碎片的对象层列表的表尾;
2.4.4.4.1.2.2.1.4)若Af-k对应的碎片属性为不透明,则将碎片属性修改为透明;如果透明,则保持;
2.4.4.4.1.2.2.2)将Ai从Ao-k中删除,然后回到步骤2.4.4.4.1.2;
2.4.4.4.1.2.2.3)若Ai不等于Af-k,则判断Ai是否等于Ao-k;
2.4.4.4.1.2.2.3.1)如果Ai等于Ao-k,则说明Ao-k完全被Af-k包含,再不可能与其他碎片的区域相交,将Ai从Af-k中删除;
2.4.4.4.1.2.2.3.2)判断Af-k对应的碎片是否为图像类型;
2.4.4.4.1.2.2.3.3)若Af-k对应的碎片是图像类型,则将Ai合并入最终透明区域,然后判断是否已经遍历完碎片链表,没有则继续遍历,否则结束遍历;
2.4.4.4.1.2.2.3.4)如果不是图像类型,则往碎片链表中插入一个新碎片,轮廓区域为Ao-k,对象层列表为Af-k对应的碎片的对象层列表加上当前图元对象,然后判断是否已经遍历完碎片链表,没有则继续遍历,否则结束遍历;
2.4.4.4.1.2.2.4)如果Ai不等于Ao-k,则
2.4.4.4.1.2.2.4.1)将Ai从Ao-k中删除;
2.4.4.4.1.2.2.4.2)将Ai从Af-k中删除;
2.4.4.4.1.2.2.4.3)判断Af-k对应的碎片是否为图像类型;
2.4.4.4.1.2.2.4.4)若Af-k对应的碎片是图像类型,则将Ai合并入最终透明区域,然后判断是否已经遍历完碎片链表,没有则继续遍历,否则结束遍历;
2.4.4.4.1.2.2.4.5)如果不是图像类型,则往碎片链表中插入一个新碎片,轮廓区域为Ai,对象层列表为Af-k对应的碎片的对象层列表加上当前图元对象,然后判断是否已经遍历完碎片链表,没有则继续遍历,否则结束遍历;
2.4.4.4.1.3)当正常遍历完当前碎片链表之后,Ao-k应仍非空(否则之前已经停止遍历),将其作为一个新碎片插入碎片链表中,该新的碎片的轮廓区域为Ao-k,该新的碎片的对象层列表为当前图元对象。
如图9所示,2.4.4.4.2)对于当前图元对象是简单透明且是图像类型的情况,作如下处理:
2.4.4.4.2.0)判断Ao-k与最终透明区域的交集是否非空;
2.4.4.4.2.1)若非空,则从Ao-k中删除交集部分,然后前进到步骤2.4.4.4.2.2,若Ao-k与最终透明区域的交集是空集,则直接前进到步骤2.4.4.4.2.2;
2.4.4.4.2.2)判断Ao-k是否非空,如果为空,则退出遍历,
2.4.4.4.2.2.0)如果非空,则遍历当前页面分块k中的碎片链表,当前碎片的轮廓区域记为Af-k;
2.4.4.4.2.2.1)令Ai为Ao-k与Af-k的交集,若Ai为空,则判断是否已经遍历完碎片链表,没有则继续遍历,否则结束遍历,若Ai非空,则作如下处理:
2.4.4.4.2.2.2)将Ai合并入最终透明区域;
2.4.4.4.2.2.3)判断Ai是否等于Af-k;
2.4.4.4.2.2.3.1)若Ai等于Af-k,说明Af-k完全被Ao-k包含,则将Af-k对应的碎片从当前碎片链表中删除;
2.4.4.4.2.2.3.2)将Ai从Ao-k中删除,然后回到步骤2.4.4.4.2.2;
2.4.4.4.2.2.3.3)若Ai不等于Af-k,则判断Ai是否等于Ao-k;
2.4.4.4.2.2.3.4)如果Ai等于Ao-k,则说明Ao-k完全被Af-k包含,再不可能与其他碎片的区域相交,将Ai从Af-k中删除,停止对碎片链表的遍历;
2.4.4.4.2.2.3.5)如果Ai不等于Ao-k,则将Ai从Af-k中删除,然后前进到步骤2.4.4.4.2.2.3.2;
2.4.4.4.2.3)当正常遍历完当前碎片链表之后,Ao-k应仍非空(否则之前已经停止遍历),将其作为一个新碎片插入碎片链表中,该新的碎片的轮廓区域为Ao-k,该新的碎片的对象层列表为当前图元对象。
需要说明的是,简单透明的定义可以根据需要进行修改和扩充,例如,可以将具有常数的透明度参数描述的透明属性定义为简单透明,或者将仅具有一种或两种颜色值的透明属性定义为简单透明。
3)透明图元碎片链表的使用:
顺序遍历每一个页面分块中透明图元碎片链表,对于每一个透明图元碎片链表作如下处理:
3.1)若当前碎片是不透明碎片,则从当前页面分块对应的去透明区域中删除其对应的轮廓区域;
3.2)否则(当前碎片是透明碎片):
3.2.1)确定碎片的去透明区域;
3.2.2)若当前碎片是图形类型,则对图形碎片进行混色计算以去除透明,将去除透明之后的结果写入中间指令文件;
3.2.3)设置当前页面分块对应的去透明区域结果,即将当前页面分块对应的去透明区域加入到页面去透明区域中;
3.24)设置当前页面分块对应的最终透明区域结果,即将当前页面分块对应的最终透明区域加入到页面最终透明区域中。
在本发明的实施例中,通过透明图元碎片链表的创建、维护与使用,从而提高了透明页面光栅化效率。本发明实施例通过在进行点阵像素级的透明混色运算之前对页面上的透明图元对象进行“降透明处理”,使得部分或全部透明图元对象转化为不透明的页面区域。另外,本发明实施例通过恰当地设置,可以方便地增加定义和规则以进一步提高处理各种类型透明对象的效率。采用本发明上述实施例的方法,能够在很大程度上减少以设备坐标空间下点阵像素为单位进行的超大数据量的透明计算,从而使得透明页面光栅化的效率得到有力的提升。
上述改进方法不仅适用于采用PDF描述的透明页面,还适用于采用其它指令语言描述的透明页面,比如采用可扩展标记语言页面规范(XPS,XML Paper Specification)描述的透明页面。
图10示出了根据本发明实施例的用于页面的光栅化处理装置的示意图,包括:
获取模块10,用于获取原始透明区域;
去透明模块20,用于对获取的位于原始透明区域之内的图元对象进行去透明处理,以生成最终透明区域;
运算模块30,用于在光栅化处理中,对最终透明区域进行混色运算。
优选地,获取模块用于在扫描原始指令文件以生成中间指令文件时,对透明图元所占轮廓区域进行记录,确定其所处页面分块,并存入对应的页面分块的中间指令文件中,以得到所述原始透明区域。
优选地,去透明模块包括:第一模块,用于将当前的图元对象所占的轮廓区域与原始透明区域求交得到交集区域Ao,其中o为图元对象的索引;第二模块,用于若Ao非空,则遍历Ao所在的页面分块;第三模块,用于将Ao与当前页面分块k中的原始透明区域求交得到交集区域Ao-k;第四模块,用于若Ao-k非空,则根据当前的图元对象的透明属性进行去透明处理。
从以上的描述中可以看出,本发明上述的实施例因为确定了最终透明区域,且仅对透明区域进行混色运算,所以降低了运算量,提高了光栅化处理效率。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。