1.源码实现
#include <stdio.h>
#include <cairo/cairo.h>
#define M_PI 3.141592654
int main()
{
cairo_surface_t *surface, *surface2;
cairo_t *cr, *cr2;
surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 300, 300);
surface2 = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 300, 300);
cr = cairo_create(surface);
cr2 = cairo_create(surface2);
cairo_set_source_rgb(cr, 0, 1, 0);
cairo_arc(cr, 100, 150, 80, 0, 2 * M_PI);
cairo_fill(cr);
cairo_set_operator(cr, CAIRO_OPERATOR_DEST_OUT);
cairo_set_source_rgb(cr, 1, 1, 0);
cairo_arc(cr, 200, 150, 80, 0, 2 * M_PI);
cairo_fill(cr);
cairo_surface_flush(surface);
cairo_set_source_rgb(cr2, 0, 1, 0);
cairo_arc(cr2, 100, 150, 80, 0, 2 * M_PI);
cairo_fill(cr2);
cairo_set_operator(cr2, CAIRO_OPERATOR_OUT);
cairo_set_source_rgb(cr2, 1, 1, 0);
cairo_arc(cr2, 200, 150, 80, 0, 2 * M_PI);
cairo_fill(cr2);
cairo_surface_flush(surface2);
cairo_set_operator(cr2, CAIRO_OPERATOR_ADD);
cairo_set_source_surface(cr2, surface, 0, 0);
cairo_paint(cr2);
cairo_surface_flush(surface2);
cairo_surface_write_to_png(surface2, "a.png");
cairo_surface_destroy(surface);
cairo_surface_destroy(surface2);
cairo_destroy(cr);
cairo_destroy(cr2);
return 0;
}
2.编译源码
$ gcc -o test test.c -lcairo
3.运行程序
$ ./test
4.结果展示
a.png
网友评论