开罗仅渲染到特定的颜色组件

时间:2016-02-10 18:33:39

标签: cairo

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

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

这可能吗?谢谢。

1 个答案:

答案 0 :(得分:1)

使用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;
}