CAIRO_OPERATOR_CLEAR未按预期工作

时间:2014-05-08 09:20:49

标签: c++ cairo

我想用Cairo和C ++删除以前填充的部分。

考虑以下MWE:

void test(cairo_t *cr){
    cairo_set_source_rgb(cr, 1, 1, 1);
    cairo_paint(cr); //background

    cairo_rectangle(cr, 50, 50, 150, 150);
    cairo_set_source_rgb(cr, 0, 0, 1);
    cairo_fill(cr); //first rect
    cairo_set_operator(cr,CAIRO_OPERATOR_CLEAR);
    cairo_arc(cr, 100, 100, 100, 0, M_PI * 2);
    cairo_fill(cr); //circle that show remove a part of the rect
}

结果如下:

enter image description here

根据documentation,我预计根本没有黑色,并且蓝色矩形的所有部分都在圆圈下方被移除(因此白色作为背景)。

我误解了操作员吗?我犯了什么错误吗?

1 个答案:

答案 0 :(得分:1)

cairo如何知道你认为的背景?

您链接的文档提到Alpha通道和所有颜色通道都设置为0.这是完全透明的黑色。

文档中的示例是带有Alpha通道的图像,因此清除的部分变得透明。

您正在使用没有Alpha通道的图像,因此清除的部分会变黑。