ZetCode

Cairo 定义

最后修改于 2023 年 7 月 17 日

在本篇 Cairo 图形教程中,我们将提供一些 Cairo 图形库的有用定义。这将帮助我们更好地理解 Cairo 的绘图模型。

上下文

在 Cairo 中,绘图是通过 Context 完成的。Cairo 上下文保存了描述如何进行绘图的所有图形状态参数。这包括线宽、颜色、绘图目标表面以及许多其他信息。这使得实际的绘图函数可以接受更少的参数,从而简化接口。

在 Cairo 中,所有绘图始终是针对 cairo_t 对象进行的。Cairo 上下文绑定到一个特定的表面。例如 PDF、SVG、PNG、GtkWindow 等。

路径

路径由一个或多个线段组成。这些线段由两个或多个锚点连接。路径可以由直线和曲线组成。路径有两种类型:开放路径和闭合路径。在闭合路径中,起点和终点重合。在开放路径中,起点和终点不重合。

在 Cairo 中,我们从一个空路径开始。首先定义一个路径,然后通过描边(stroking)和填充(filling)使其可见。一个重要的注意事项:每次调用 cairo_strokecairo_fill 函数后,路径都会被清空。我们必须定义一个新的路径。

路径由子路径组成。

来源

源(source)是我们用于绘图的绘制物。我们可以将源比作我们用来绘制轮廓和填充形状的笔或墨水。有四种基本类型的源:颜色、渐变、图案和图像。

表面

表面是我们正在绘制到的目标。我们可以使用 PDF 或 PostScript 表面来渲染文档,或通过 Xlib 和 Win32 表面直接绘制到平台。

文档中提到了以下表面

typedef enum _cairo_surface_type {
  CAIRO_SURFACE_TYPE_IMAGE,
  CAIRO_SURFACE_TYPE_PDF,
  CAIRO_SURFACE_TYPE_PS,
  CAIRO_SURFACE_TYPE_XLIB,
  CAIRO_SURFACE_TYPE_XCB,
  CAIRO_SURFACE_TYPE_GLITZ,
  CAIRO_SURFACE_TYPE_QUARTZ,
  CAIRO_SURFACE_TYPE_WIN32,
  CAIRO_SURFACE_TYPE_BEOS,
  CAIRO_SURFACE_TYPE_DIRECTFB,
  CAIRO_SURFACE_TYPE_SVG,
  CAIRO_SURFACE_TYPE_OS2
} cairo_surface_type_t;

遮罩

在将源应用于表面之前,它会先被过滤。遮罩(mask)用作过滤器。遮罩决定了源应用到何处,以及何处不应用。遮罩的不透明部分允许复制源。透明部分则不允许将源复制到表面。

模式

一个 cairo 模式(pattern)代表在表面上绘图时的源。在 cairo 中,模式是可以从中读取的内容,它被用作绘图操作的源或遮罩。cairo 中的模式可以是纯色、基于表面的或渐变模式。

在本章 Cairo 教程中,我们给出了一些基本定义。