Cairo 库绘图
Cairo 是一个用 C 编程语言编写的用于创建 2D 矢量图形的库。
Cairo绘图模型
- Source
绘图目标区。
- Mask
遮罩,在将源应用于表面之前,先对其进行过滤。 遮罩用作过滤器。 遮罩确定在哪里应用源,在哪里不应用。 遮罩的不透明部分允许复制 源。透明零件不允许将源复制到表面。 - Path
绘制的虚拟路径,可以是一条线段,闭合四边形或者其他曲线。路径可以由直线和曲线组成。 路径有两种。 打开和关闭路径。 在封闭的路径 中,起点和终点相遇。 在开放路径中,起点和终点不相交。 - Conext
在Cairo中绘制都是通过Context的,该变量持有所有图形样式绘图变量,比如县宽度、颜色及surface等。所有Cario所绘制的变量的结构叫做 cairo_t对象,可以绘制在PDF、SVG、PNG及GtkWindow上。 - Surface
Cairo绘制的目标区域,使用cario_surface_t表示。
Cario简单使用
#include <cairo/cairo.h>
int main(void)
{
cairo_surface_t *surface;
cairo_t *cr;
//从test.png创建surface
surface = cairo_image_surface_create_from_png("test.png");
cr = cairo_create(surface);
cairo_set_source_rgb(cr, 2, 2, 255);
//设置字体
cairo_select_font_face(cr, "Sans", CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size(cr, 40.0);
//获取宽高
int width = cairo_image_surface_get_width (surface);
int height = cairo_image_surface_get_height (surface);
printf("with=%d, height=%d \n.", width, height);
//移动到画布中间
cairo_move_to(cr, width/2, height/2);
//顺时针旋转 30°
cairo_rotate(cr, 3.14 * 30 / 180);
//显示绘制字体
cairo_show_text(cr, "Cairo Cairo Cairo .");
//生成带文字的图片
cairo_surface_write_to_png(surface, "test1.png");
//资源销毁
cairo_destroy(cr);
cairo_surface_destroy(surface);
return 0;
}
编译&运行
gcc -o carotest carotest.c -l cairo
./carotest
查看效果
原图:
生成:
参考资料:
https://www.kancloud.cn/apachecn/zetcode-zh/1950067
https://www.cairographics.org/tutorial/