我想用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
}
结果如下:
根据documentation,我预计根本没有黑色,并且蓝色矩形的所有部分都在圆圈下方被移除(因此白色作为背景)。
我误解了操作员吗?我犯了什么错误吗?
答案 0 :(得分:1)
cairo如何知道你认为的背景?
您链接的文档提到Alpha通道和所有颜色通道都设置为0.这是完全透明的黑色。
文档中的示例是带有Alpha通道的图像,因此清除的部分变得透明。
您正在使用没有Alpha通道的图像,因此清除的部分会变黑。