我有2个精灵(QImage)=两张透明背景的照片。我想知道精灵是否碰撞。 我已经检查过两个矩形重叠了。但我想知道这两个图像是否真的重叠(红色区域)。
我的第一个想法是使用QPainter和QPainter :: CompositionMode_SourceIn或QPainter :: CompositionMode_DestinationIn创建两个图像重叠(粉红色矩形)的图像。这样,如果图像完全重叠,则新图像将不是完全透明的。 但是如何快速检查它是否完全透明?
如何以非常快的方式检查两个图像是否真正重叠? 你的方法是什么?
答案 0 :(得分:0)
你的方法没有错。合成图像可以是将8个像素打包成一个字节的位图。将源图像转换为位图(透明像素= 0值,非透明= 1值),然后将它们合并在一起,然后扫描非零值。这将非常快 - 与内存带宽一样快。但它会消耗合成图像的记忆。
您还可以为任一图像生成n元空间分区树,树节点表示非透明片段,并通过合并树来检测冲突,同时仅包括树2中与树1重叠的节点。开创性论文Merging BSP Trees Yields Polyhedral Set Operations给出了算法。
基准测试需要决定哪个更快,以及混合方法(BSP降低到某个单元格大小,然后是位图表示)是否会更快。