cairo 教程一

PC平台:linux(unbutu 10.04)

示例采用C语言实现,可使用gcc编译它们,编译命令格式如下:

$gcc-o example `pkg-config --cflags --libs gtk+-2.0` example.c

Cairo概念

本文讲述Cairo图形库中一些有用的定义/概念,理解它们可以帮助你更好的理解Cairo绘图模型。

环境(Context)

使用Cairo绘图,必须要首先创建Cairo环境(Context)Cairo环境保存着所有的图形状态参数,这些参数描述了图形的构成,譬如线条宽度、颜色、要绘制的外观(Surface)以及其它一些信息。Cairo环境允许真正的绘图函数使用很少的一部分参数,以此提高接口的易用性。调用gdk_cairo_create() 函数可为所绘制的图形创建一个Cairo环境。

cairo_t* cr;
cr = gdk_cairo_create
(widget->window);

这两行代码创建了一个Cairo环境,并且这个Cairo环境是关联到GdkDrawable对象上的。cairo_t结构体包含了当前渲染设备的状态,也包含了所绘制图形的坐标。从技术上来讲,cairo_t就是所谓的Cairo环境。

Cairo所有的绘图函数都要去操作cairo_t对象。一个Cairo环境可以被关联到一种特定的外观,譬如pdfsvgpngGdkDrawable等。

GDK没有对CairoAPI 进行封装,它只允许创建一个可基于GdkDrawable对象绘制图形的Cairo环境。有一些GDK函数可以将GDK的矩形或填充区域转换为CairoPath (路径),然后使用Cairo绘图与渲染。

路径(Path)

一条Path(路径)通常是由一条或多条首尾相接的直线段构成的,也可以由直线段与曲线段构成。路径可分为Open(开放)类型与Closed(闭合)类型,前者的首尾端点不重合,后者的首尾端点重合。

Cairo中,绘图要从一条空路径开始,首先定义一条路径,然后通过绘制/填充操作使之可见。要注意的是,每次调用cairo_stroke() cairo_fill() 函数之后,路径会被清空,不得不再定义新的路径。

一条路径可由一些子路径构成。

(Source)

源好比绘图中所使用的画笔/颜料,使用它来绘制/填充图形轮廓。有4种基本的源:colorgradientpatternimage

外观(Surface)

Surface就是要绘制图形的最终体现形式,譬如可使用PDFPostScript外观实现文本内容的渲染,或者使用XlibWin32外观实现屏幕绘图。

Cairo具体有那些外观类型,可参考其定义:

typedefenum_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)

在源作用于外观之前,可对其实现过滤,蒙板(mask)即是过滤器。蒙板决定哪些源可被显示。蒙板不透明的部分允许复制源至外观,蒙板透明的部分则禁止复制源至外观。

图案(Pattern)

图案表示被绘制到外观的源。在Cairo中,图案是一种可以读取的内容,可用作绘图操作的源或蒙板。图案可以是纯色模式、基于外观的模式以及渐变模式。



你可能感兴趣的:(cairo 教程一)