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
- cairo学习
- Cairo学习笔记
- cairo简单学习
- cairo学习简单总结
- cairo
- AGG与Cairo学习资料
- cairo介绍
- cairo 教程
- cairo总结
- 什么是Cairo
- Cairo-dock
- Cairo初探
- Cairo 绘图
- cairo api
- Cairo教程
- Cairo 初探
- cairo安装
- cairo设置
- cache
- 第三章第五题
- c#写入Mysql中文显示乱码 解决方法
- 大牛文章转载一
- 隐蔽通信(FQ)和侦查取证那些事儿
- cairo学习
- Android Studio Android SDK Android NDK 官方下载地址
- Java网络编程从入门到精通(30):定制accept方法
- PHP_关于php时间戳最大支持到2038年问题解决办法
- 我觉定从现在开始开个博客
- Shell 字符串截取:${varible##*string} ${varible#*string} ${varible%%string*} ${varible%string*}
- IOS之身份证号码校验
- 年轻程序员需要学习的5大经验
- Java.lang.Enum.ordinal()方法