利用C语言的Cairo图形库绘制太极图实例教程
2016-12-20 11:10
821 查看
可能许多人对直接用C语言绘图仍然停留在Turbo C的graphics.h年代,或许也有教育老化的原因,毕竟曾经的经典早已成往事,与其想尽各种办法寻找与其兼容的图形库,不如顺势拥抱灿烂的明天。Cario(http://cairographics.org/)是一个非常出色的2D图形库,著名的GTK+3.0完全采用Cario作为绘图引擎,由此可见它的强大和吸引力。
Cario支持X Window,Quartz,Win32,image.buffers,PostScript,PDF和SVG文件等多种输出设备,开源且跨平台。或许有人会觉得这么强大的东西用起来一定会十分的棘手,其实不然,它所提供的API函数出乎意料的简单易用,这篇文章在这里演示一个绘图太极图的例子,供大家参考。
实例代码如下:
#include <cairo.h> #define SIZE (640) /* 太极图大小 */ #define CX (SIZE / 2) /* 太极圆中心横坐标 */ #define CY (SIZE / 2) /* 太极圆中心纵坐标 */ #define R (SIZE / 2) /* 太极圆半径 */ /* 把角度转换为所对应的弧度 */ #define ANGLE(ang) (ang * 3.1415926 / 180.0) int main(int argc, char *argv[]) { /* 创建32位RGBA颜色格式的Cairo绘图环境,直接在Memory中渲染 */ cairo_surface_t* surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, SIZE + 1, SIZE + 1); cairo_t* cr = cairo_create(surface); /* 绘制太极边框 */ cairo_set_line_width(cr, 2.0); cairo_set_source_rgba(cr, 0, 0, 0, 1); cairo_arc(cr, CX, CY, R, ANGLE(0), ANGLE(360)); cairo_stroke(cr); /* 绘制阴阳圆 */ cairo_set_source_rgba(cr, 0, 0, 0, 1); cairo_arc(cr, CX, CY, R, ANGLE(90), ANGLE(270)); cairo_fill(cr); cairo_set_source_rgba(cr, 1, 1, 1, 1); cairo_arc(cr, CX, CY, R, ANGLE(-90), ANGLE(90)); cairo_fill(cr); /* 绘制阴阳线 */ cairo_set_source_rgba(cr, 0, 0, 0, 1); cairo_arc(cr, CX, CY - R / 2, R / 2, ANGLE(-90), ANGLE(90)); cairo_fill(cr); cairo_set_source_rgba(cr, 1, 1, 1, 1); cairo_arc(cr, CX, CY + R / 2, R / 2, ANGLE(90), ANGLE(270)); cairo_fill(cr); /* 绘制太极眼 */ cairo_set_source_rgba(cr, 1, 1, 1, 1); cairo_arc(cr, CX, CY - R / 2, R / 10, ANGLE(0), ANGLE(360)); cairo_fill(cr); cairo_set_source_rgba(cr, 0, 0, 0, 1); cairo_arc(cr, CX, CY + R / 2, R / 10, ANGLE(0), ANGLE(360)); cairo_fill(cr); /* 将Memory的渲染效果存储到图片中 */ cairo_surface_write_to_png(surface, "taichi.png"); /* 销毁并退出Cairo绘图环境 */ cairo_destroy(cr); cairo_surface_destroy (surface); return 0; }
代码非常之简单吧,借此抛砖引玉,希望更多的人会喜欢上Cario图形库。GCC编译的话,可以参考如下的命令。
gcc -o taichi $(pkg-config --cflags --libs cairo) taichi.c
运行后的效果是这样的,大家可以试试看。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
您可能感兴趣的文章:
相关文章推荐
- C语言利用Cairo图形库绘制太极图
- C语言利用Cairo图形库绘制太极图
- 利用C语言玩转魔方阵实例教程
- Android利用OpenGLES绘制天空盒实例教程
- C语言循环结构与时间函数用法实例教程
- 利用resteasy框架构建rest webservice----第二波:使用不同的方式让resteasy发布我们的restful webservice 服务(实例、教程)
- Android简明开发教程八:引路蜂二维图形绘制实例功能定义
- dreamweaver做网页实例教程 利用表格美化页面
- 利用resteasy框架构建rest webservice----第四波:resteasy与spring真正集成发布我们的restful webservice 服务(实例、教程)
- PhotoShop(PS)模仿绘制超逼真的佳能6D相机实例教程
- 利用resteasy框架构建rest webservice----第一波:快速构建HelloWorld(实例、教程)
- 【PyQt4 实例5】利用QPainter绘制各种图形
- [转]C语言图形编程(六) -图形程序设计实例:零件图形的绘制
- 利用resteasy框架构建rest webservice----第一波:快速构建HelloWorld(实例、教程)
- 利用resteasy框架构建rest webservice----第二波:使用不同的方式让resteasy发布我们的restful webservice 服务(实例、教程)
- 利用resteasy框架构建rest webservice----第三波:实现文件上传---非form提交方式(实例、教程)
- php 利用数据库教程信息生成静态页面实例代码
- javascript实例教程(8) 利用javascript基于浏览器类型的重定向
- (转)[Android实例] eoe & 友盟教程大赛 - 利用ant来实现zip/tar的压缩与解压
- 利用JXLS根据模板导出Excel实例教程