Graphics 两个矩形之间的填充区域

Graphics 两个矩形之间的填充区域,graphics,cairo,Graphics,Cairo,在我的程序中,我想用一些颜色填充两个矩形之间的区域,内部矩形应该是白色的。我这样做的方式是画外矩形并用所需的颜色填充,然后画内矩形并用白色填充 大致如下: cairo_矩形(cr、x1、y1、宽度1、高度1); cairo\u set\u source\u rgb(cr,0,0,0); 开罗填料(cr); cairo_矩形(cr、x2、y2、宽度2、高度2); cairo_set_source_rgb(cr,1,1,1); 开罗填料(cr); 我想知道是否还有其他方法可以做到这一点,我可以画两

在我的程序中,我想用一些颜色填充两个矩形之间的区域,内部矩形应该是白色的。我这样做的方式是画外矩形并用所需的颜色填充,然后画内矩形并用白色填充

大致如下:

cairo_矩形(cr、x1、y1、宽度1、高度1);
cairo\u set\u source\u rgb(cr,0,0,0);
开罗填料(cr);
cairo_矩形(cr、x2、y2、宽度2、高度2);
cairo_set_source_rgb(cr,1,1,1);
开罗填料(cr);

我想知道是否还有其他方法可以做到这一点,我可以画两个矩形,然后填充它们之间的区域?

哪种版本的cairo?“这可能没关系,但以防万一。”奥利弗赛尔1.12.16在重读你的问题时,我收回了我的答案。为什么不只是划过你想要的厚度,然后填充呢?我想你是想减少填充和设置“源”rgb调用,因为它们很昂贵。@oliverseal我可以这样做,但如果我有两个或三个或两个形状在一起,这行得通吗?我不这么认为。取决于所需的视觉效果。如果您有多种颜色,则每个颜色都需要
cairo\u set\u source\u rgb
cairo\u fill
。我不知道cairo\u set\u fill\u rule()。我在《开罗手册》中读到了这方面的内容,但不太理解。在CAIRO_FILL_RULE_偶数_奇数的情况下-手册中说,如果交叉口总数为奇数,则该点将被填充。您能告诉我在我的例子中它是如何工作的吗?这也是我最初的想法,但重新阅读后,这并不能解决它。@sap:在您的例子中,内部矩形内像素的缠绕将是两个,因为它包含在两个矩形中。因为这是偶数,所以不包括内部矩形。两个矩形之间的点只有一个绕组,因此将包含在填充中。所以这应该可以解决“填充它们之间的区域”——这是你问题的一部分。我不知道你所说的“同时绘制两个矩形”是什么意思。也许你想要cairo\u fill\u preserve(cr);cairo\u set\u source\u rgb(cr,其他颜色);cairo\u stroke(cr);?@UliSchlachter所说的“同时绘制两个矩形”,我的意思是,不用cairo\u set\u source\u rgb()和cairo\u fill()对于每个长方形,还有其他方法吗?经过您的解释,现在我理解了您的解决方案。我将尝试一下。谢谢
cairo_rectangle(cr, x1, y1, width1, height1);
cairo_rectangle(cr, x2, y2, width2, height2);
/* Remember to reset this to CAIRO_FILL_RULE_WINDINIG if it matters for other code */
cairo_set_fill_rule(cr, CAIRO_FILL_RULE_EVEN_ODD);
cairo_fill(cr);