1.源码实现
#include <stdio.h>
#include <math.h>
#include <cairo.h>
#define CAIRO_HEIGHT 300
#define PI 3.141592654
void cairo_line_by_angle(cairo_t *cr, int x, int y, int r, int angle, int *a, int *b)
{
double x1 = x;
double y1 = CAIRO_HEIGHT - y;
double x2 = x1 + r * cos(angle*PI/180.00);
double y2 = y1 + r * sin(angle*PI/180.00);
*a = x2;
*b = CAIRO_HEIGHT - y2;
cairo_line_to(cr, *a, *b);
}
int main()
{
cairo_surface_t *surface;
cairo_t *cr; //声明一支画笔
int x = 100;
int y = 240;
double r = 100.00 / (2.00 * cos(36.0*PI/180.0));
surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 300, CAIRO_HEIGHT);
cr = cairo_create(surface); //创建画笔
cairo_set_source_rgb(cr,0,1,0); //设置画笔颜色,也就是红,绿,蓝,这里设置成绿色。
cairo_move_to(cr, x, y); //五角星
cairo_line_by_angle(cr, x, y, r, 36, &x, &y);
cairo_line_by_angle(cr, x, y, r, 324, &x, &y);
cairo_line_by_angle(cr, x, y, r, 108, &x, &y);
cairo_line_by_angle(cr, x, y, r, 36, &x, &y);
cairo_line_by_angle(cr, x, y, r, 180, &x, &y);
cairo_line_by_angle(cr, x, y, r, 108, &x, &y);
cairo_line_by_angle(cr, x, y, r, 252, &x, &y);
cairo_line_by_angle(cr, x, y, r, 180, &x, &y);
cairo_line_by_angle(cr, x, y, r, 324, &x, &y);
cairo_close_path(cr);
cairo_fill(cr); //填充,使用的颜色当然是上面设置的颜色。
//cairo_stroke(cr);
cairo_surface_write_to_png(surface, "h.png"); //写入png文件
cairo_destroy(cr); //销毁画笔
return 0;
}
2.编译源码
$ gcc -I$HOME/local/include/cairo -o example example.c -L$HOME/local/lib -lcairo -lXrender -lfontconfig
3.运行结果
h.png