searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Cairo 库的使用

2023-05-29 03:04:51
33
0

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/

 

 

0条评论
作者已关闭评论
张****龙
18文章数
0粉丝数
张****龙
18 文章 | 0 粉丝
张****龙
18文章数
0粉丝数
张****龙
18 文章 | 0 粉丝
原创

Cairo 库的使用

2023-05-29 03:04:51
33
0

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/

 

 

文章来自个人专栏
linux相关
18 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0