cairo学习

来源:互联网 发布:手机老是显示网络异常 编辑:程序博客网 时间:2024/05/18 00:36

环境:

使用cairo绘图,必须要首先创建cairo环境,cairo环境保存着所有的图形状态参数,这些参数描述了图形的构成,譬如线条宽度、颜色、要绘制的外观及其他一些信息。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环境可以被关联到一种特定的外观。譬如pdf、svg、png、GdkDrawable等。

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

路径:

一条path通常是由一条或多条首尾相接的直线段构成的,也可以由直线段与曲线段构成。路径可分为open类型与closed类型,前者的首尾端点不重合,后者的首尾端点重合。

在cairo中,绘图要从一条空路径开始,首先定义一条路径,然后通过绘制填充操作使之可见。

要注意:没底调用cairo_stroke()或cairo_fill()函数之后, 路径会被清空,不得不再定义新的路径。

源:

源好比绘图中所使用的画笔颜料。使用它来绘制填充图形轮廓。有4种基本的源:color、gradient、pattem、image。

外观(surface):

surface就是要绘制图形的最终体现形式,譬如可使用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_XUB,

CAIRO_SURFACE_TYPE_XCB,

CAIRO_SURFACE_TYPE_GUTZ,

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;

蒙板:

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

图案:

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

 cairo绘制PNG图像:test_cairo.c

 #include <cairo.h>

int main(int argc,char *argv [ ])

{

    cairo_surface_t *surface;

    cairo_t *cr;

// 这两行代码声明了一个cairo外观与一个cairo环境

    surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32,320,48);

    cr = cairo_create(surface);

// 现在我们生成了cairo外观与cairo环境,所生成的外观是一份320x48 px的图像。

    cairo_set_source_rgb(cr,0.627,0,0);

// 设置源的颜色为darkred,就好比是选择了暗红色的颜料

    cairo_select_font_face(cr,"Adobe Heiti Std",CAIRO_FONT_SLANT_NORMAL,CAIRO_FONT_WEIGHT_NORMAL);

    cairo_set_font_size(cr, 24.0);

// 选择字体类型并设置其尺寸 (注:可使用

“fc-list” 命令查看系统所安装字体)

    cairo_move_to(cr, 10.0, 24.0);

    cairo_show_text(cr, "hello world");

// 将画笔移动到图像区域的(10.0,34.0)位置开始绘制文本

    cairo_surface_write_to_png(surface,"image.png");

// 这个函数创建PNG图像

    cairo_destroy(cr);

    cairo_surface_destroy(surface);

// 最后,回收所有cairo环境与外观所占用的内存资源

    return 0;

}

 编译:

gcc test_cairo.c -lcairo -I /usr/include/cairo

 

 

 

 

 

 

 

 

 

 

 

 

0 0
原创粉丝点击