我正在使用Cairo,并希望一次渲染一个颜色组件。例如,如果我渲染一组蓝色矩形然后渲染一组红色矩形,我想要重叠的地方是紫色而不是红色。
使用set_source_rgb(ctx, 0.0, 1.0, 0.0)
不起作用,因为它会用零覆盖其他频道。使用透明度也不起作用,因为它同样影响所有渠道。我想要一种只渲染到一个频道的方法。
这可能吗?谢谢。
答案 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;
}