2016-02-10 71 views
0

我使用開羅,並希望一次呈現一個顏色組件。例如,如果我渲染一組藍色矩形,然後渲染一組紅色矩形,我希望它們重疊的位置是紫色而不是紅色。使用set_source_rgb(ctx, 0.0, 1.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; 
}