cario java_Cairo图形库 概述

参考: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.

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502229.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python大神推荐_大神推荐!!!高评分书籍轻松带你入门Python

上次讲到了初学者阶段必看的书籍。今天给大家继续讲讲进阶者阶段当你对Python有了一定的了解,并在生活或者工作中使用过一段时间,那么你就可以考虑进阶相关的书籍,请看下面这3本:《Python深度学习》豆瓣评分:9.6推荐指…

java中this图解_JAVA-初步认识-第七章-this关键字的使用场景和原理图解

一.this有什么用?我们用例子的形式来体现一下。下面的截图说明,给人对象一初始化的时候,赋值个姓名。赋值姓名的时候,拿n赋值给name,DOS显示创建对象时,构造函数初始化成功。在例子中,我们将“旺…

python汉诺塔_汉诺塔递归算法/搬金盘的婆罗门 - Python实现

汉诺塔递归算法/搬金盘的婆罗门 - Python实现版权声明本文节选自作者本人的图书《Python编程基础及应用》,高等教育出版社。本文可以在互联网上自由转载,但必须:注明出处(作者:海洋饼干叔叔)并包含指向本页面的链接。本文不可以以…

java算程序运行时间_关于计算Java程序运行时间

第一种是以毫秒为单位计算的。Java代码//伪代码long startTimeSystem.currentTimeMillis(); //获取开始时间doSomeThing(); //测试的代码段long endTimeSystem.currentTimeMillis(); //获取结束时间System.out.println("程序运行时间: "(end-start)&qu…

reactor模型_Reactor模式以及Netty中的应用

思维导图一、Reactor模式介绍本文主要参考Doug Lea(大神)的《Scalable IO in Java》中讲述的Reactor模式。

Java文件路径及文件名乱码_javaweb文件下载及文件名中文乱码处理

版权声明:yanghaha的原创博客 https://blog.csdn.net/qq_44758435/article/details/90636619文件下载需要先导入两个jar包commons-fileupload-1.3.1.jarcommons-io-2.4.jarString fileName request.getParameter("fileName");//下载文件,需要…

sa是什么岗位_服务顾问SA在维修企业扮演的重要角色

前言:SA在维修企业中扮演什么样的角色,这就是我们今天的话题。作者 | 李连俊来源 | 汽车服务世界(ID:asworld168)客户的群体很多,不同的客户群体消费的能力不一样,SA简称【服务顾问】。SA要对客户的消费能力进行评估&a…

java报错symbol_为何此处会出现找不到symbol的错误呢?

使用this不是引用创建的对象么?import java.util.Comparator;import java.lang.Comparable;public class Point implements Comparable {int x, y;public final Comparator SLOPE_ORDER new ByOrder();private class ByOrder implements Comparator {public int co…

python pdf转txt保留全部信息_Python 将pdf转换成txt(不处理图片)

上一篇文章中已经介绍了简单的python爬网页下载文档,但下载后的文档多为doc或pdf,对于数据处理仍然有很多限制,所以将doc/pdf转换成txt显得尤为重要。查找了很多资料,在linux下要将doc转换成txt确实有难度,…

java cxf 不使用springmvc_使用cfx与springMVC集成发布与调用webservice

客户端调用代码 Client.java package com.quickmap.common;import javax.xml.namespace.QName;import javax.xml.ws.Service;import javax.xml.ws.soap.SOAPBinding;public final class Client {private static final QName SERVICE_NAME new QName("http://common.quickm…

python表单处理_python flask 表单处理Flask-WTF

涉及到的插件和包有Flask-WTF,WTForms。内容有表单的创建使用流程,一些最佳实践,还有在页面显示提示消息的简单方式,配合Flask内置的 flash()。Flask的requset对象包含了client端发送过来的所有请求,在request.form中就有POST方法…

电脑环境变量设置 java_如何设置自己电脑的系统环境变量?

Windows下JAVA用到的环境变量主要有3个,JAVA_HOME、CLASSPATH、PATH。下面逐个分析。JAVA_HOME指向的是JDK的安装路径,如x:\JDK_1。4。2,在这路径下你应该能够找到bin、lib等目录。值得一提的是,JDK 的安装路径可以选择任意磁盘目…

用python实现打开虚拟机_如何使用python从虚拟机读取文件

我使用oraclevirtualbox在我的系统上运行一个虚拟机,我要完成的是从物理系统读取虚拟机上的文件。我正在使用virtualbox api(pyvbox)与virtualbox进行接口。这是我第一次使用virtualbox api。在更新>>> import virtualbox>>> vbox virtualbox.Vi…

java 调用 mahout_java – 运行Mahout本地获取MahoutDriver的ClassNotFoundException

我试图在Windows 8机器上本地运行Mahout(没有Hadoop).我意识到这不是最佳设置,但这就是我必须使用的.当我尝试运行bin / mahout时,我收到以下错误:$bin/mahoutMAHOUT_LOCAL is set, so we dont add HADOOP_CONF_DIR to classpath.no HADOOP_HOME set, running local…

java写hive自定义函数_hive自定义函数的实现和执行

1. 先建个maven工程,创建Java类,将你要实现的内容写进类的方法里,例如public class StringExt extends UDF{public String evaluate(String pnb){return "Hello " pnb;}}这个类的实现很简单,继承了org.apache.hadoop.h…

python创建文件夹用什么函数_Python——os.mkdir()在指定路径下创建文件夹 + 路径的连接理解...

Python——os.mkdir()在指定路径下创建文件夹 路径的连接理解发布时间:2018-11-16 17:08,浏览次数:512, 标签:Pythonosmkdir引子: 我在用路径连接函数 os.path.join() 时发现,其连接的各级目录必须首先存在&#xff0…

基于hadoop的商品推荐系统_【论文笔记】基于矩阵分解的推荐系统

本文是对经典论文的阅读笔记,大部分为论文的中文翻译内容(笔者英语水平也就六级飘过的水准,不喜勿喷)论文标题:Matrix factorization techniques for recommender systems随着Netflix竞赛的结果所示,矩阵分…

php fpm在哪配置,php7的php-fpm.conf文件在哪里

php7下的php-fpm.conf文件一般是在php的安装目录下的etc目录中,文件路径为/usr/local/php-fpm/etc/php-fpm.conf。php-fpm.conf是php-fpm进程管理器的配置文件。php-fpm.conf是php-fpm进程管理器的配置文件。文件路径:/usr/local/php-fpm/etc/php-fpm.co…

python 生成pdf页面大小_(Python)更改使用xtopd生成的PDF文件的页面大小和格式

我想用Python转换xlsx。我使用tablib和xtopdf模块构建了一个结构良好的表。工作出色!不幸的是,内容不适合一个pdf页面。所以我想把页面大小和格式改成水平A3。但我不知道这怎么可能。我的代码:import randomimport tablibfrom openpyxl impor…

php数组合并字段,PHP数组按要求合并

数组一:[0] > Array([rid] > 1[hf_rid] > 0[aid] > 1[uid] > 1[content] > 我肯定第一名[re_time] > 2017-10-10 10:59[nickname] > 就是这么帅)[1] > Array([rid] > 2[hf_rid] > 0[aid] > 1[uid] > 1[content] > 马蛋,中枪了[re_ti…