前言

可能许多人对直接用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

#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

运行后的效果是这样的,大家可以试试看。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

linux c语言画太极,利用C语言的Cairo图形库绘制太极图实例教程相关推荐

  1. c语言太极图编程语言,利用C语言的Cairo图形库绘制太极图实例教程.pdf

    利利用用C语语言言的的Cairo图图形形库库绘绘制制太太极极图图实实例例教教程程 前前言言 可能许多人对直接用C语言绘图仍然停留在T urbo C 的graphics.h年 ,或许也有教育老化的原因, ...

  2. C语言利用Cairo图形库绘制太极图

    许多人对直接用C语言绘图仍然停留在Turbo C的graphics.h年代,或许也有教育老化的原因,毕竟曾经的经典早已成往事,与其想尽各种办法寻找与其兼容的图形库,不如顺势拥抱灿烂的明天.Cario( ...

  3. Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)—命令提示符cmd的几种方法

    Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)-命令提示符cmd的几种方法 目录 利用python语言实现调用内部命令-命令提示符cmd的几种方法 T1. ...

  4. c语言画猪程序,C语言画小猪佩奇(转载)

    C语言画小猪佩奇 分享下如何用 C 语言画小猪佩奇 使用带符号距离场(signed distance field, SDF)表示圆形: 沿用这个方法表示形状,但这次我们想利用 ASCII 字符|/=\ ...

  5. 怎么用c语言画出坐标曲线,c语言打印贝塞尔曲线坐标(三阶)

    贝塞尔曲线 贝塞尔曲线(Bézier curve),是应用于二维图形应用程序的数学曲线.一般的矢量图形软件通过它来精确画出曲线,贝赛尔曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋,我们 ...

  6. 怎么用c语言画出坐标曲线,c语言曲线的画法-c语言每天进步一点点(2)

    用c图形函数来绘制图形是c应用基础的一部分 相对于c语言的枯燥的文本显示,图形化界面无疑能使c语言内容显示更加直观,我们编程人员更可以利用c语言中的图形函数来编写绘图函数,这样就能更方便的利用c画图, ...

  7. java集成r语言_R语言- 实验报告 - 利用R语言脚本与Java相互调用

    一.实训内容 利用R语言对Java项目程序进行调用,本实验包括利用R语言对java的.java文件进行编译和执行输出. 在Java中调用R语言程序.本实验通过eclipse编写Java程序的方式,调用 ...

  8. 【C语言基础】利用C语言简单知识点实现计算器加减乘除运算功能

    利用循环语句以及函数调用实现计算器的简单功能 计算器是我们在学习生活中不可或缺的一个工具,有时候要计算一些比较复杂的数据时只能借助于计算器.基本上每个人都会使用计算器,那么如何利用C语言设计出一个自己 ...

  9. mfc如何删除lineto画的_见到过的最完整的CAD实例教程:如何画切割刀片

    大家不用猜测,为什么许久都不更新CAD的实例教程. 就是因为没素材,没有其他特别原因. 而前几天,终于有同学发来素材来咨询具体的画法,今天就给这位小伙伴一个满意的答复,也希望大家在画类似的图形时有所参 ...

最新文章

  1. Web项目中文件上传Filter处理
  2. 【网易中台实践】云信业务中台的敏捷开发
  3. tolowercase_Java String toLowerCase()方法与示例
  4. Error format not a string literal and no format arguments解决方案
  5. 微软认知服务开发实践(1) - 牛津计划简介
  6. pytorch得到梯度计算结果
  7. Linux开机自动启动软件/可执行程序方法
  8. 【ELK123】ElasticSearch+Kibana
  9. 两种方案的demo示例
  10. Docker-Docker-file构建Redis5.0.3镜像
  11. 浏览器是怎么解析JS的代码
  12. C#6.0VISUALSTUDIO 2015 C#入门经典 第7版pdf
  13. 华铸CAE70(灰铁).
  14. cadence 617工艺库安装以及相关问题解决
  15. GeForce Experience 绕过登录与禁止自动更新
  16. 家庭组网方案研究(2):路由器和光猫上的连接方式
  17. 手机接收短信验证码生成(纯数字)
  18. 获得商品详情API接口
  19. 创业者2012必看十大文章(6)
  20. 解决“Could not find @openzeppelin/contracts/token/ERC20/ERC20Detailed.sol“问题

热门文章

  1. 网络拓扑发现原理研究
  2. 2017-08-16 BEX5下集成FullCalendar
  3. 日月如梭,玩转JavaScript日期
  4. 背景图片-密度屏幕(移动端)
  5. 拦截器 参数不过去 的解决方法
  6. POSIX 线程详解
  7. HTML参考系列(1)-文本格式化标签
  8. openStack常见报错
  9. idea java web mysql_JavaWeb 开发环境配置 — 基于IDEA 2019.2
  10. Android模拟神器Genymotion eclipse插件安装问题出解决