C/CPLUS

C语言使用Cairo实现形状组合效果

2022-03-14  本文已影响0人  一路向后

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
上一篇下一篇

猜你喜欢

热点阅读