cairo 教程二
来源:互联网 发布:excel引用其他表格数据 编辑:程序博客网 时间:2024/05/25 18:10
Cairo后端
Cairo支持多种后端,本文基于几个示例讲述如何使用Cairo各种后端创建PNG图像、PDF文件与SVG文件以及如何使用Cairo在GTK窗口中绘图。
1.PNG图像
第一个示例(main.c)用于生成PNG图像。
#include<cairo.h>
int
main (intargc,char*argv[])
{
cairo_surface_t *surface;
cairo_t *cr;
surface =
cairo_image_surface_create (CAIRO_FORMAT_ARGB32,320,48);
cr = cairo_create (surface);
cairo_set_source_rgb (cr,0.627,0,0);
cairo_select_font_face (cr,"AdobeHeiti Std",
CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size (cr,24.0);
cairo_move_to (cr,10.0,34.0);
cairo_show_text (cr,"Iam a Chinese,I love china.");
cairo_surface_write_to_png (surface,"image.png");
cairo_destroy (cr);
cairo_surface_destroy (surface);
return0;
}
这个示例是一个很小的控制台程序,运行后可生成一份PNG图像文件。
#include<cairo.h>
上述头文件声明了上面示例中调用的函数以及一些常量的定义。
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环境,所生成的外观是一份320x48px的图像。
cairo_set_source_rgb(cr,0.627,0,0);
设置源的颜色为darkred,就好比是选择了暗红色的颜料。
cairo_select_font_face(cr,"AdobeHeiti Std", CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size(cr,24.0);
选择字体类型并设置其尺寸。(注:可使用"fc-list"命令查看系统所安装字体)
cairo_move_to(cr,10.0,34.0);
cairo_show_text(cr,"Iam a Chinese,I love china");
将“画笔”移动到图像区域的(10.0,34.0)位置开始绘制文本。
cairo_surface_write_to_png(surface,"image.png");
这个函数创建PNG图像。
cairo_destroy(cr);
cairo_surface_destroy(surface);
最后,回收所有Cairo环境与外观所占用的内存资源。
编译这个示例:
$gcc -o main`pkg-config --cflags --libs gtk+-2.0` main.c
编写对应的Makefile文件进行编译
.PHONY: clean all
all: main
main:main.c
gcc $^ -Wall -g -o $@ `pkg-config --cflags --libs gtk+-2.0`
clean:
rm -f main
生成的PNG图像如下图所示:
- cairo 教程二
- cairo 教程
- Cairo教程
- cairo 教程一
- cairo教程三
- cairo 教程四
- cairo 教程5
- Cairo教程七
- cairo
- The Womain Taxi Driver In Cairo二
- cairo介绍
- cairo总结
- 什么是Cairo
- Cairo-dock
- Cairo初探
- Cairo 绘图
- cairo学习
- cairo api
- tcp状态迁移图
- submit和button提交表单区别与总结
- Bug 6270137 Unnecessary acquisition of the list header block in ASM
- [iOS] iOS 6的Rotation
- 二叉查找树的构造与遍历[Java实现]
- cairo 教程二
- 关于文件的文本读写和二进制读写
- Nginx+Tomcat+pcre 安装过程和出现的问题以及解决方案
- .net对象作为参数传递的注意事项
- 微軟将弃用System.Data.OracleClient
- Linux下动态库使用小结
- LINUX下SCP命令
- javascript扩展总结(2)
- 左右拨动控制序列帧播放