2014-01-23 69 views
0

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

类似以下
cairo_rectangle(cr, x1, y1, width1, height1);
cairo_set_source_rgb(cr,0,0,0);
cairo_fill(cr);
cairo_rectangle(cr, x2, y2, width2, height2);
cairo_set_source_rgb(cr,1,1,1);
cairo_fill(cr);

我想知道,如果有,我可以画两个矩形,然后填充它们之间的区域,这样做的任何其他方式?

+0

哪个版本的cairo?这可能没有关系,但以防万一。 – oliverseal

+0

@oliverseal它的1.12.16 – sap

+0

重新读你的问题,我拉我的答案。为什么不只是抚摸你想要的厚度然后填充?我假设你试图减少填充和set_source_rgb调用,因为它们很昂贵。 – oliverseal

回答

0
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); 
+0

我不知道cairo_set_fill_rule()。我在开罗手册中阅读了它,但没有很好理解。在CAIRO_FILL_RULE_EVEN_ODD的情况下 - 手册说如果交点的总数是奇数,则该点将被填充。你能告诉我在我的情况下它是如何工作的吗? – sap

+0

这也是我原来的想法,但重新阅读后,这并不能解决问题。 – oliverseal

+0

@sap:在你的情况下,内部矩形内像素的绕组将是两个,因为它包含在两个矩形中。由于这是偶数,所以内部矩形不会被包括在内。两个矩形之间的点只有一个卷绕,因此将包含在填充中。所以这应该解决“填补他们之间的区域” - 你的问题的一部分。我不确定你的意思是“绘制两个矩形,也许你想cairo_fill_preserve(cr); cairo_set_source_rgb(cr,other_color); cairo_stroke(cr);? –

相关问题