美文网首页
C语言使用Cairo绘制Wifi图标

C语言使用Cairo绘制Wifi图标

作者: 一路向后 | 来源:发表于2022-03-18 21:51 被阅读0次

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.结果展示

a.png

相关文章

网友评论

      本文标题:C语言使用Cairo绘制Wifi图标

      本文链接:https://www.haomeiwen.com/subject/ygpwdrtx.html