参考:http://blog.sina.com.cn/s/blog_538732a70100p9ay.html

Cairo图形库  1. 概述

欢迎来到Cairo图形教程.这个教程将教你Cairo

2D矢量绘图库基本的和一些高级的主题.大部分例程我们使用GTK+编程库. 这个教程是用C语言来完成的.

(如果可能,我会附加上一些cairomm的东西)

2D 矢量图形

有两种不同的计算机图形. 矢量和光栅图形.

光栅图形作为像素的集合来呈现图象.矢量图形是使用诸如点/线/曲线或多边形等几何图元来呈现图像. 这些图元使用数学方程来创建.

计算机图形的两种类型各有优缺点.矢量图形比之光栅图形的优点是:

更小

无限制缩放

移动缩放填充旋转不会降低图形的质量

Cairo

Cairo 是一个创建2D矢量图形的库. 它是用C编写的. 和其他计算机语言的绑定有 Python,

Perl, C++, C#, Java. Cairo 是一个多平台的库,可工作在linux, BSDs, OSX上.

Cairo 支持多种后台.

X Window System

Win32 GDI

Mac OS X Quartz

PNG

PDF

PostScript

SVG

这意味着,我们可以使用它在Linux/BSDs, Windows,

OSX上绘制,并且我们可以使用它来创建PNG图像,PDF文件,PostScript文件和SVG文件.

我们可以比较Cairo库和 Windows上的GDI+ 库还有Mac

OS上的Quartz 2D. Cairo 是一个开源软件库. 从版本2.8开始, cairo

库就是GTK+系统的一部分了.

Compiling exampes

这个例子用C语言创建. 我们使用GNU C编译器来编译它们.

gcc -o example `pkg-config --cflags --libs

gtk+-2.0` example.c

Cairo 定义

在教程的这个部分,我们为Cairo图形库提供一些有用的定义.它将帮助我们更好的理解Cairo绘图模型.

要在Cairo里画点东西,我们必须先创建一个Cairo上下文(context).Cairo上下文拥有描绘绘制怎样完成的所有的图形状态参数.

它包括诸如线宽/颜色/要绘制到的表面信息,还有很多其它东西. 它允许实际的绘制函数带较少的参数来简化接口.

gdk_cairo_create()函数调用为绘制创建一个cairo上下文(context)

cairo_t *cr;

cr = gdk_cairo_create(widget->window);

这两行创建一个cairo上下文(context). 在这个例子里,上下文绑定到一个GdkDrawable. 一个

cairo_t 结构包含渲染设备的当前状态,包含已经绘制的形状的坐标.技术上说,cairo_t对象被称为Cairo上下文.

所有cairo绘制都是对于cairo_t对象的.

一个Cairo上下文被绑定到一个明确的表面的.一个pdf/svg/png/gdkDrawable等等.

GDK并不封装Cairo

API.它允许创建一个Cairo上下文,可被用作在GDKdrawable上绘制.有另外的函数允许转换GDK的矩形和区域到Cairo路径并使用像素缓冲来做绘制操作.

Path

一条路径由很多线组成.这些线被两个或者更多的锚点连接.  路径可以由直线段和曲线组成.

有两种路径.开放的和闭合的路径. 在闭合路径中,起点和终点重合.在开放路径中,起点和终点不重合.

在Cairo中,我们以一个空路径开始.首先我们定义一个路径然后我们通过画线和填充使之可见.

很重要一点,每次cairo_stroke()或者cairo_fill()函数调用之后,路径就空了.我们必须定义一条新的路径.

一条路径可以由很多子路径组成.

Source

Source是我们绘制时使用的颜料.我们可以拿source和笔或墨水比较.我们用它们来绘制轮廓或者填充形状.

有四种基本的source: Colors, gradients, patterns 和 images

Surface

Surface是我们需要绘制到的目标地.

我们可以使用PDF或PostScript表面渲染文档,直接通过Xlib和Win32表面绘制到一个平台.

文档提及下列表面:

typedef enum _cairo_surface_type {

CAIRO_SURFACE_TYPE_IMAGE,

CAIRO_SURFACE_TYPE_PDF,

CAIRO_SURFACE_TYPE_PS,

CAIRO_SURFACE_TYPE_XLIB,

CAIRO_SURFACE_TYPE_XCB,

CAIRO_SURFACE_TYPE_GLITZ,

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;

Mask

在源应用到表面之前要先经过过滤. Mask用作过滤器. Mask决定源应用到哪,不应用到哪.

Mask的不透明部分允许你拷贝源.  透明部分不让你拷贝源到表面.

Pattern

一个cairo 样式描绘了当绘制到表面时的源. 在cairo中,一个样式就是某种能够从之读取并用作一个绘制操作的源或者mask.

样式可以是实心的,基于表面的,或者甚至是渐变图案.

cario java_Cairo图形库 概述相关推荐

  1. WebKit、Gecko使用图形库

    2008年11月30日 星期日 上午 01:20 阅读了之后,觉得作为浏览器内核WebKit.Gecko,为了能高效美观的显示页面的内容,选择适当的图形库非常重要.如果图形库选择不当,往往会导致页面上 ...

  2. 《Python程序设计教程》读书笔记

    第一章 程序设计概述 1.1 程序设计基础知识 算法+数据结构=程序 程序设计四步骤:1分析问题,确定数学模型或方法2设计算法,画出流程图3选择编程工具,按算法编写程序4调试程序,分析输出结果 算法的 ...

  3. python语言程序设计刘卫国答案_Python语言程序设计

    章Python语言基础1 1.1Python语言概述1 1.1.1Python语言的发展历史1 1.1.2Python语言的特点2 1.1.3Python语言的应用领域3 1.2Python语言的开发 ...

  4. Arduino的Adafruit GFX图形库介绍(一)- 概述

    Adafruit GFX图形库介绍(一)- 概述 概述 概述 Arduino的Adafruit_GFX库为我们所有的LCD和OLED显示器提供了通用语法和一组图形功能.这使得我们可以在不同的图形之间转 ...

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

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

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

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

  7. Android 硬件 OpenGL ES 模拟设计概述

    简介 Android 平台的 OpenGL ES 模拟由多个组件实现,它们是: 一些宿主机的 "翻译器" 库.它们实现了由 Khronos 定义的 EGL,GLES 1.1 和 G ...

  8. JavaFX官方教程(一)之JavaFX概述

    翻译自  JavaFX概述 本章概述了可以使用JavaFX API构建的应用程序类型,下载JavaFX库的位置以及有关正在交付的关键JavaFX功能的高级信息. JavaFX是一组图形和媒体包,使开发 ...

  9. (转)Eclipse平台技术概述

    转载:周金根 http://zhoujg.blog.51cto.com/1281471/516833  Eclipse:Eclipse平台技术概述 2010-10-19 13:35:00 标签:Ecl ...

最新文章

  1. java字符存储,在什么编码是Java字符存储在?
  2. 让“云”无处不在-Citrix Xenserver之一 环境搭建
  3. VS2012发布网站详细步骤
  4. for循环里的if语句中break_Go语言极简教程 - 第五篇 控制语句
  5. opencv 线性滤波器
  6. linux死机了怎么办?
  7. 微信好友大揭秘,使用Python抓取朋友圈数据,通过人脸识别全面分析好友,一起看透你的“朋友圈”...
  8. csv 中显示逗号和双引号
  9. 自定义RecyclerView动画——实现remove飞出效果
  10. linux svn启动失败,linux svn authorization failed错误
  11. 计算机不能代替人类英语,英语作文 谈谈计算机1我们已进入了计算机时代2计算机有许多优点3计算机不能代替人类...
  12. php是视频还是图片格式,php 视频、音频和图片文件上传,该如何解决
  13. python实现三个或三个以上列表之间元素相互组合
  14. Flutter AppBar控件
  15. 云南公安云计算平台项目获中国优秀云计算开源案例特等奖
  16. 云优CMS采集不需要云优CMS授权
  17. Android腾讯微博开放平台入门(三)Oauth授权
  18. 导出oracle数据库日志文件,Oracle数据库导出还原的两种基本方法imp/impdp
  19. python提取格式化日志
  20. html语言判断水仙花数,水仙花数判断讲解

热门文章

  1. 让MySql支持Emoji表情(MySQL中4字节utf8字符保存方法)
  2. 一些看起来简单做起来难的程序员笔试面试题集锦
  3. [置顶] 删除:大数据取舍之道读书笔记
  4. QT项目开发与团队合作
  5. Windows坐标系统
  6. Leetcode--260. 只出现一次的数字Ⅲ
  7. java实现数组排序代码_Java使用选择排序法对数组排序实现代码
  8. jdbc获取结果行数,如何获取JDBC中的行数?
  9. python开发工具管理系统_Python开发桌面软件文档及网址管理工具,强迫症的福音...
  10. python table类中的 可以作为初步观察工具_Python程序设计基础_课程2020最新章节测试网课课后答案...