使用Cairo,我在任意位置放置了一些文本,我需要知道它们是否与之前绘制的任意形状重叠。我可以裁剪到前面的图形的路径,如果发生任何裁剪,就意味着存在重叠。然而,Cairo似乎没有任何函数来判断是否发生了裁剪。
有什么方法可以轻松实现我想要的东西吗?我想我只是想看看两个形状是否相交。
发布于 2009-10-21 01:19:43
我通过使用Qt进行渲染来解决了这个问题。它似乎对不同的路径操作有相当广泛的支持,并且同时支持PDF和SVG输出。
发布于 2009-10-21 03:41:19
根据您希望获得的质量,您可以使用cairo_stroke_extents
、cairo_fill_extents
和cairo_text_extents
并处理边界框。
一种更好的方法是只计算文本的边界框,并使用cairo_in_fill
或cairo_in_stroke
检查最后一条路径的四个角。最大的误差是从单个字形的形状到其边界框的距离,但这可能足以满足您的目的。
最后一个选项是拼合文本并检查任何单点,就像上一步一样。
发布于 2009-10-19 19:08:01
我没有看到任何东西--至少,没有什么简单的东西--如果什么都没有,我也不会感到惊讶。Cairo的目标是栅格化矢量绘制操作,而不是交叉测试。
但是,如果我要查看两段文本是否重叠,我会这样做:
<代码>G29
这是相当暴力的,但它甚至可以处理反走样。我以前在X上使用GTK做过类似的事情(出于不同的目的),它间接地使用了Cairo。
如果您不想这样做,并且Cairo不提供API,那么您可以添加一个API。这可能会很困难;在这样做之前,你可能想和卡尔·沃思谈谈。
https://stackoverflow.com/questions/1590381
复制相似问题