2.Cairo图形库-定义

来源:互联网 发布:淘宝低价竞争 编辑:程序博客网 时间:2024/05/24 05:54

The Cairo graphics tutorial
在Cairo图形库指南的这一部分,我们会介绍Cairo图形库里面的一些有用的概念。它们可以帮助我们理解Cario的绘制模式。

上下文图形环境(Context)
在用Cairo绘制图形前,我们必须创建一个Cairo的绘制环境。这个绘制环境包含了所有需要的图形状态,这些状态描述了如何去绘图。这些状态有线宽,颜色,在哪个绘图后端上面绘制等等。这样,就可以在实际的绘制时,可以使用比较少的参数从而简化接口。通过调用gdk_cairo_create()函数,可以在画布上创建一个绘图环境。
代码:
    cairo_t *cr;
    cr = gdk_cairo_create(widget->window);

上面这两行创建了一个Cairo绘图上下文。在这个例子里面,绘图上下文绑定到了GdkDrawable.一个cairo_t结构包含了渲染劥的当前状态和已经绘制过的图形的坐标状态。专业的说,这个cairo_t定义的变量就叫做Cairo Contexts.

所有的Cairo绘图操作都是由cairo_t这个结构来完成的。一个绘图上下文绑定到一个绘图后端,比如pdf,svg,png,GdkDrawable等等。

GDK并没有封闭Cairo API。它允许创建一个在GDK drawables上面绘图的Cairo上下文。甚至有一些函数可以把GDK的矩形或是区域转换为Cairo paths,然后用这些像素去进行绘制操作。

路径(Path)
一个路径可以是由一条线或是多条线组成的。这些线由两个或多个锚点连接。路径可以组成直线或是曲线。有两种路径:开放路径和封闭路径。在封闭路径里,终点和起点是重合的。相反的,开放路径里,终点和起点没有重合。

在Cairo里面,可以创建一个空路径。首先,我们定义一个路径,然后可能通过描线或是填充,使这个路径可见。重要的一点是,在调用cairo_stroke()或是cairo_fill()函数后,这个路径会变为空。我们可以重新定义一个新的路径。
一个路径是由子路径组成的。
A path is made of subpaths.

资源(Source)
在绘图过程中用到的东西叫做资源。我们可以把资源看做是画笔,墨水等等我们可以用来画线或是填充形状的东西。Cairo中,有四种:颜色,斜率,图案样式,图像。

面:
面是我们要在上面绘画的东西。我们可以用PDF或是PostScript这些绘画面去渲染一个文档,通过Xlib或是Win32这些绘画面去直接在某个平台上进行绘画。

(Cairo)文档中定义了下面这些绘画面
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

A cairo pattern represents a source when drawing onto a surface. In cairo, a pattern is something that you can read from, that is used as the source or mask of a drawing operation. Patterns in cairo can be solid, surface-based, or even gradients patterns.

 

 

原文链接:http://zetcode.com/tutorials/cairographicstutorial/cairodefinitions

原创粉丝点击