c++ - 绘图区 : fill area outside a region

标签 c++ c cairo gtkmm

我关注了this gtkmm tutorial关于如何绘制形状并用颜色填充它们(例如,透明背景上的红色圆盘)。从这个例子中,我还能够得出另一个例子,即蓝色背景上的红色圆盘。

但是,我真正需要的是一个蓝色背景的透明圆盘,填充所有内容减去圆盘区域,它应该保持透明。

所以对于 cairo,通常的工作流程是:

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

我需要一些工作流来实现这样的事情:

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

我在网上对此做了一些研究,但所有示例似乎都假设我们想要填充形状的内部区域(我必须承认这更典型)。

我该怎么做?

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

最佳答案

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

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)

关于c++ - 绘图区 : fill area outside a region,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50283367/

相关文章:

C++:编译器是否优化整数 + 浮点算术运算?

c++ - 拆分文件并将数据传递给其他类

c - 填充字符串留在 C 中的麻烦

python - 如何从 cairo.ImageSurface 获取像素?

c++ - 使用函数指针的代码无法编译

c++ - 如何从 gprof 中排除某个函数?

打印链表后崩溃

C - 将文件中的文本/句子读取到字符串数组中

开罗链接导致内存泄漏

r - 在使用适用于 macOS 的 GitHub Actions 进行测试之前如何安装 X11?