首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Cairo测试文本是否重叠

Cairo测试文本是否重叠
EN

Stack Overflow用户
提问于 2009-10-19 18:44:26
回答 4查看 1.2K关注 0票数 2

使用Cairo,我在任意位置放置了一些文本,我需要知道它们是否与之前绘制的任意形状重叠。我可以裁剪到前面的图形的路径,如果发生任何裁剪,就意味着存在重叠。然而,Cairo似乎没有任何函数来判断是否发生了裁剪。

有什么方法可以轻松实现我想要的东西吗?我想我只是想看看两个形状是否相交。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-21 01:19:43

我通过使用Qt进行渲染来解决了这个问题。它似乎对不同的路径操作有相当广泛的支持,并且同时支持PDF和SVG输出。

票数 1
EN

Stack Overflow用户

发布于 2009-10-21 03:41:19

根据您希望获得的质量,您可以使用cairo_stroke_extentscairo_fill_extentscairo_text_extents并处理边界框。

一种更好的方法是只计算文本的边界框,并使用cairo_in_fillcairo_in_stroke检查最后一条路径的四个角。最大的误差是从单个字形的形状到其边界框的距离,但这可能足以满足您的目的。

最后一个选项是拼合文本并检查任何单点,就像上一步一样。

票数 3
EN

Stack Overflow用户

发布于 2009-10-19 19:08:01

我没有看到任何东西--至少,没有什么简单的东西--如果什么都没有,我也不会感到惊讶。Cairo的目标是栅格化矢量绘制操作,而不是交叉测试。

但是,如果我要查看两段文本是否重叠,我会这样做:

  1. 选择适合我的测试环境的Cairo后端(例如Xlib等),并使用我可以用来进行逐像素分析的屏幕外表面。
  2. 使用100% alpha以纯蓝色绘制第一段文本。
  3. 使用50% alpha以纯红色绘制第二段文本。
  4. 扫描表面以红色和蓝色都为非零的像素。

<代码>G29

这是相当暴力的,但它甚至可以处理反走样。我以前在X上使用GTK做过类似的事情(出于不同的目的),它间接地使用了Cairo。

如果您不想这样做,并且Cairo不提供API,那么您可以添加一个API。这可能会很困难;在这样做之前,你可能想和卡尔·沃思谈谈。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1590381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档