首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DrawingArea:区域外的填充区域

DrawingArea:区域外的填充区域
EN

Stack Overflow用户
提问于 2018-05-11 00:35:47
回答 2查看 460关注 0票数 1

我跟踪了本gtkmm教程关于如何绘制形状并填充颜色(例如,透明背景上的红色光盘)。从这个例子中,我还可以导出另一个在蓝色背景上使用红色光盘的示例。

然而,我真正需要的是一个蓝色背景的透明光盘,它填充了所有的减去磁盘区域,这应该保持透明。

因此,对于cairo,通常的工作流程是:

  1. 创建一个曲面
  2. 画一个形状(例如画一个圆圈)
  3. 填充圆圈,使它成为一个圆盘。

我需要一些工作流来实现这样的功能:

  1. 创建一个曲面
  2. 画一个形状(例如画一个圆圈)
  3. 填充区域外的圆圈,这样我就有了一个彩色背景,中间有一个透明的“洞”。

我已经在网上做过一些研究,但是所有的例子似乎都假设我们想要填充形状的内部区域(我必须承认,这是比较典型的)。

我怎么能这么做?

我添加了C标记,因为我不介意您是否喜欢使用C(甚至Python)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-13 09:41:58

画出你的圆圈,画一个包含所有可见区域的矩形。将开罗填充规则设置为偶数/奇数。填满。好了。

代码语言:javascript
复制
cairo_save(cr); // Save the state
cairo_arc(cr, 42, 42, 21, 0, 2*M_PI); // Draw circle
cairo_rectangle(cr, 0, 0, width, height); // Rectangle containing everything
cairo_set_fill_rule(cr, CAIRO_FILL_RULE_EVEN_ODD);
cairo_fill(cr);
cairo_restore(cr); // Restore default fill rule (optional; pairs with save above)
票数 4
EN

Stack Overflow用户

发布于 2018-05-11 01:46:13

IMHO的“画出圆圈”的功能对图形框架来说是复杂的。如果你在外面画一个以上的圆圈,它也可能是模棱两可的。

当后来绘制的图形被放置在先前绘制的图形上时。在绘制其他形状之前,需要绘制一个矩形来填充整个图形上下文。这被定义为clear,在某些框架中使用背景色

工作流程看起来像是:

  1. 创造表面。
  2. 用圆圈外的颜色画背景。
  3. 画满特定颜色的圆圈,例如白色。 因此,圆圈将覆盖背景。

如果坚持先画圆圈,请搜索用于绘制图像的洪水填充算法。然而,当在屏幕上绘图时,实现屏幕像素并执行这样的算法是不必要的,也是非常昂贵的。

我在您提供的书的后面部分找到了示例应用程序:用Cairo创建时钟。这似乎很有帮助。

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

https://stackoverflow.com/questions/50283367

复制
相关文章

相似问题

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