1.源码实现
#include <stdio.h>
#include <cairo/cairo.h>
#define CR_NUM 9
#define M_PI 3.141592654
#define Y_MOVE 120
int main()
{
cairo_surface_t *surface[CR_NUM];
cairo_t *cr[CR_NUM];
int i;
for(i=0; i<CR_NUM; i++)
{
surface[i] = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 600, 600);
cr[i] = cairo_create(surface[i]);
}
cairo_set_source_rgb(cr[1], 0, 0, 0);
cairo_arc(cr[1], 300, 300+Y_MOVE, 250, 0, 2 * M_PI);
cairo_fill(cr[1]);
cairo_set_source_rgb(cr[2], 1, 1, 1);
cairo_arc(cr[2], 300, 300+Y_MOVE, 200, 0, 2 * M_PI);
cairo_fill(cr[2]);
cairo_set_source_rgb(cr[3], 0, 0, 0);
cairo_arc(cr[3], 300, 300+Y_MOVE, 150, 0, 2 * M_PI);
cairo_fill(cr[3]);
cairo_set_source_rgb(cr[4], 1, 1, 1);
cairo_arc(cr[4], 300, 300+Y_MOVE, 100, 0, 2 * M_PI);
cairo_fill(cr[4]);
cairo_set_source_rgb(cr[5], 0, 0, 0);
cairo_arc(cr[5], 300, 300+Y_MOVE, 50, 0, 2 * M_PI);
cairo_fill(cr[5]);
cairo_set_source_rgb(cr[6], 0, 0, 0);
cairo_move_to(cr[6], 50, 50+Y_MOVE);
cairo_line_to(cr[6], 550, 50+Y_MOVE);
cairo_line_to(cr[6], 300, 300+Y_MOVE);
cairo_fill(cr[6]);
cairo_set_source_surface(cr[7], surface[1], 0, 0);
cairo_paint(cr[7]);
cairo_set_source_surface(cr[8], surface[3], 0, 0);
cairo_paint(cr[8]);
cairo_set_operator(cr[7], CAIRO_OPERATOR_DEST_OUT);
cairo_set_operator(cr[8], CAIRO_OPERATOR_DEST_OUT);
cairo_set_source_surface(cr[7], surface[2], 0, 0);
cairo_paint(cr[7]);
cairo_set_source_surface(cr[8], surface[4], 0, 0);
cairo_paint(cr[8]);
cairo_set_source_surface(cr[0], surface[7], 0, 0);
cairo_paint(cr[0]);
cairo_set_source_surface(cr[0], surface[8], 0, 0);
cairo_paint(cr[0]);
cairo_set_source_surface(cr[0], surface[5], 0, 0);
cairo_paint(cr[0]);
cairo_set_operator(cr[0], CAIRO_OPERATOR_DEST_IN);
cairo_set_source_surface(cr[0], surface[6], 0, 0);
cairo_paint(cr[0]);
cairo_surface_write_to_png(surface[0], "a.png");
for(i=0; i<CR_NUM; i++)
{
cairo_surface_destroy(surface[i]);
cairo_destroy(cr[i]);
}
return 0;
}
2.编译源码
$ gcc -o test test.c -lcairo
3.运行程序
$ ./test
4.结果展示
![](https://img.haomeiwen.com/i16386400/016487285deb8108.png)
a.png
网友评论