You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
For compilers to find libffi you may need to set:
export LDFLAGS="-L/usr/local/opt/libffi/lib"
For pkg-config to find libffi you may need to set:
export PKG_CONFIG_PATH="/usr/local/opt/libffi/lib/pkgconfig"
二维矢量图形
计算机图形可分为两类,矢量图形与光栅图形。光栅图形是将图像表示为像素点集。矢量图形则是使用一些几何图元(点、直线、曲线、多边形等)表示图像,这些图元是使用数学公式生成的。
Cairo
Cairo 是用于绘制二维矢量图形的库,采用 C 语言实现,又被许多其它计算机语言所绑定,譬如 Python、PERL、C++、C#、Java。Cairo 是跨平台库,可运行于 Linux、BSD、OSX 等操作系统。
Cairo 力求在各种后端上产生相同的输出,但是每种后端各有优势。例如,PDF 后端会尽可能使用矢量计算(只在必要时生成图像),而 PostScript 后端实际上会为每个页面生成一个大图像。
Cairo 的呈现模型受到许多原有技术的影响。Cairo 采用了 PostScript 中的路径、笔画(stroke)和填充(fill)概念,还实现了 PDF 和现代 X 服务器实现的呈现扩展中的 Porter-Duff 图像组合技术。另外,cairo 还实现了剪切、蒙板和渐变等补充特性。
Cairo 支持多种后端 (backend):
这些后端意味着可使用 Cairo 库在 Windows、Linux/BSD、OSX 等平台的窗口中绘图,也可以用于生成 PNG 图片、PDF/PostScript/SVG 文件。
与 Windows 操作系统的 GDI+ 以及 Mac OS 的 Quartz 2D 库相比,Cairo 是自由软件库。自 GTK+ 2.8 版本开始,Cairo 成为 GTK+ 库的一部分。
Cairo 基本绘图模块
Cairo API 分为三大模块:核心绘图类(Drawing)、外表类(Surfaces)和与字体(Fonts)相关的类(更多细节见 参考资料)。
核心绘图类(Drawing)
Cairo 有一个绘图上下文(drawing context),相当于画布。上下文是
Context
是 Cairo 的核心结构,在 Cairo 中使用cairo_t
来表示,呈现图形。在绘图上下文上通过Paths
,绘制可以绘制一系列曲线和相关数据的路径,还可设置笔画宽度或填充。Cairo 笔画路径含有 5 种基本绘图操作:Cairo 还提供类似 OpenGL 的坐标变换操作。变换操作包括:平移
cairo_translate
,伸缩cairo_scale
,旋转cairo_rotate
。我们也可以通过cairo_transform
函数来指定一个复杂的变换。外表类(Surfaces)
Cairo 外表类型,对应各种输出目标。Cairo 外表(surface)是执行绘图的位置。具体地说,有用于图像(内存缓冲区)的外表、用于 Open GL 的 glitz 外表、用于呈现文档的 PDF 和 PostScript 外表以及用于直接执行绘图的 XLib 和 Win32 外表。这些外表类型都派生自外表基类型
cairo_surface_t
。字体(Fonts)
Cairo 为字体提供了一个基类
cairo_font_face_t
。Cairo 支持可缩放字体,其中包含给定字体大小的缓存标准。另外,可以用各种字体选项控制如何显示给定的字体。在使用 Cairo 时,在UNIX
上常用的字体是Freetype
字体,在Windows
平台上使用Win32
字体。绘制一个矩形到 rectangle.png 图片上,示例:
Mac 环境下编译安装 Cairo
1.安装
MacPorts
安装fink
安装Homebrew
安装2.设置环境变量
安装完 cairo, 需设置环境变量:
3.安装
gcc
编译器由于 cairo 采用 C 语言实现,mac环境需使用 gcc 编译
gcc 编译,可以把前面讲的例子命名为 cairotest.c 文件进行编译,会生成 rectangle.png 文件
小知识: .cpp和.c 文件区别
Cairo 实际应用
许多有影响力的开放源码项目已经采用了 Cairo,Cairo 已经成为 Linux 图形领域的重要软件。已经采用 Cairo 的重要项目包括:
参考资料:
Cairo
cairo repository
Cairo 图形指南
cairo-demo
CairoSVG
Ghostscript
postscript
Encapsulated PostScript (EPS) File Format, Version 3.x
Encapsulated PostScript
C语言中.h和.c文件解析
C++/C/JAVA/Python之间的区别?
The text was updated successfully, but these errors were encountered: