天天看点

【渲染引擎】cairo介绍

cairo是一个轻量级的渲染2D引擎,可以根据具体的点阵坐标输出成不同格式的结果文件,比如常见的图片格式,或者pdf格式。cairo还支持多种编程语言的接入和多种第三方插件的调用,是一个非常容易上手、容易使用的渲染引擎。

在cairo官方地址,有一个很简单的上手介绍,给出一个简单的绘制图形讲解,快速的了解如何绘制简单的文字、线条和文本。在这里就不再废话,如果英文不好,csdn上也有中文翻译。英文官方介绍请点击。

这里也贴出俩个比较适合初期上手的地址,绘制过程和代码讲解都是非常清晰的。

第一个是介绍使用cairo绘制各种图形的代码和代码讲解:

http://zetcode.com/gfx/cairo/shapesfills/

下面这个是介绍了cairo结合GTK一起绘制线的介绍,包括虚实线、line_join和linecap:

http://zetcode.com/gfx/cairo/basicdrawing/

这里主要是介绍使用cairo绘制一个面图形。根据上面链接中的一个例子进行介绍。项目需求是绘制一个面,面的边线和面的填充需要使用不同的宽度和颜色。这里几个核心方法是

  • cairo_set_line_width
  • cairo_stroke_preserve
  • cairo_fill
  • cairo_stroke

    下面贴出代码再进行具体的介绍

int draw()
{
    cairo_set_line_width(cr, );  
    cairo_set_source_rgb(cr, , , );

    cairo_translate(cr, width/, height/);
    cairo_arc(cr, , , , ,  * M_PI);
    cairo_stroke_preserve(cr);

    cairo_set_source_rgb(cr, , , ); 
    cairo_fill(cr);
}
           

上述代码会绘制一个填充和边线不一样颜色的圆。其中的关键就是cairo_stroke_preserve。该方法会对当前绘制的画笔设置,包括宽度、色值进行绘制,而且当前的路径信息会保留在绘制的上下文中。因此接下来在执行cairo_fill的时候还是在当前路径的上下文中。该方法和cairo_stroke不同的是,cairo_stroke绘制结束,当前绘制的路径信息就在绘制上下文中被清空。

继续阅读