利用C语言的Cairo图形库绘制太极图实例教程

 更新时间:2016年12月20日 11:10:42   作者:hai0808  
这几天都在研究Cairo图形库,这是一个开源跨平台的图形库,相对于OpenGL来说更容易上手使用。这篇文章是利用C语言的Cairo图形库绘制了一个太极图,对大家学习Cairo图形库具有一定的参考借鉴价值,下面来一起看看吧。

前言

可能许多人对直接用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++中std::chrono时间库的全面解析

    C++中std::chrono时间库的全面解析

    C++ std::chrono时间库是C++标准库提供的一个时间处理库,提供了一个方便、灵活和精确的时间处理工具,下面小编就带大家深入了解一下std::chrono时间库的使用吧
    2023-10-10
  • MFC对话框中添加状态栏的方法

    MFC对话框中添加状态栏的方法

    这篇文章主要介绍了MFC对话框中添加状态栏的方法,实例分析了MFC对话框添加状态栏所涉及的相关成员变量与事件实现技巧,需要的朋友可以参考下
    2015-07-07
  • C++ 11 std::function和std::bind使用详解

    C++ 11 std::function和std::bind使用详解

    这篇文章主要介绍了C++ 11 std::function和std::bind使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • C语言版学生成绩管理系统

    C语言版学生成绩管理系统

    这篇文章主要为大家详细介绍了C语言版学生成绩管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • vscode调试使用make编译的项目

    vscode调试使用make编译的项目

    VSCode本身是一个代码编辑器,自带的编译功能比较弱,本文主要介绍了vscode调试使用make编译的项目,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • 一文弄懂C语言如何实现单链表

    一文弄懂C语言如何实现单链表

    单链表是由多个结点链接组成,它的每个结点包含两个域,一个数据域和一个链接域(地址域),下面这篇文章主要给大家介绍了关于C语言如何实现单链表的相关资料,需要的朋友可以参考下
    2021-09-09
  • C语言实现简易五子棋

    C语言实现简易五子棋

    这篇文章主要为大家详细介绍了C语言实现简易五子棋,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • 详解C++11中的线程锁和条件变量

    详解C++11中的线程锁和条件变量

    C++ 11允许开发者们以标准的、不依赖于平台的方式编写多线程程序。这篇文章概述了标准库对于线程和同步操作机制的支持。这些都是非常重要的知识,希望读者们可以认真看一下
    2021-06-06
  • C++实现希尔排序(ShellSort)

    C++实现希尔排序(ShellSort)

    这篇文章主要为大家详细介绍了C++实现希尔排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C++ ncnn模型验证精度实现代码

    C++ ncnn模型验证精度实现代码

    这篇文章主要介绍了C++ ncnn模型验证精度实现过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-02-02

最新评论