开罗只渲染特定的颜色分量

Cairo only render to specific color component

我正在使用 Cairo 并希望一次渲染一个颜色分量。例如,如果我渲染一组蓝色矩形然后渲染一组红色矩形,我希望它们重叠的地方是紫色而不是红色。

使用set_source_rgb(ctx, 0.0, 1.0, 0.0) 不起作用,因为它会用零覆盖其他通道。使用透明度也不起作用,因为它同样影响所有通道。我想要一种只渲染到一个通道的方法。

这可能吗?谢谢。

使用CAIRO_OPERATOR_ADD代替CAIRO_OPERATOR_OVER(默认值):

#include <cairo.h>

int main() {
    cairo_surface_t *s = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 20, 20);
    cairo_t *cr = cairo_create(s);

    cairo_set_operator(cr, CAIRO_OPERATOR_ADD);

    /* Render blue */
    cairo_set_source_rgb(cr, 0, 0, 1);
    cairo_rectangle(cr, 0, 0, 15, 15);
    cairo_fill(cr);

    /* Render red */
    cairo_set_source_rgb(cr, 1, 0, 0);
    cairo_rectangle(cr, 5, 5, 15, 15);
    cairo_fill(cr);

    cairo_surface_write_to_png(s, "out.png");
    cairo_destroy(cr);
    cairo_surface_destroy(s);
    return 0;
}