Agg vs. Cairo 二维绘图引擎之比较和选择
cheungmine
当今时代对于作为二维图形软件开发者, 是幸运的。因为除了Windows GDI/GDI+之外,我们还有很多其他的选择。而且这些选择除了能跨平台之外,性能上与原始GDI/GDI+相比,都不逊色。
如果不考虑绘图的效果,使用Win32 GDI函数直接绘图的效率大约是同样的GDI Plus的10倍以上。为了反走样的美观,只有牺牲效率了。老式的程序还在使用GDI绘图,不是这些程序不想提升到GDI+,可能这样改动的代码量太大,所谓船大不好掉头所致。
因此,后发的优势就是可以利用当今软件发展的最新成果,快速切入一个领域,所谓迎头赶上。
言归正传。仍以我们假定的目标:开发一个二维图形软件为例。对于绘图核心引擎这块,有几种选择:
1、使用Windows/Linux原生的GDI绘图原语。
2、使用开源的绘图核心。
开源的软件目前越来越显示出强大的生命力。因此,目前虽然直接调用底层GDI/GDIPlus的函数,可以获得比较灵活的性能,但是对于商业应用软件的开发来说都不是最优的。连google这样的大公司,都有采用开源的绘图引擎(skia-后来被google收购),因此我们有理由相信,选择一个适合的引擎是必要的。
网络上对AGG的陈述不乏溢美之词:
“AGG,全名:Anti-Grain Geometry,是一个开源的、高效的2D图形库,它的网站: http://www.antigrain.com/ 。AGG的功能与GDI+的功能非常类似,但提供了比GDI+更灵活的编程接口,其产生的图形的质量也非常高,而且它是跨平台的,其宣传可以在非常多的操作系统上运行,至少在Windows、Wince、Linux三个台平上测试通过。”
“在设计上,它是师出Boost库,在其中使用了大量的现代标准C++语言的语法规则,包括模板、仿函数等处理,但是为了能在更多的平台上使用,它并没有直接使用Boost和STL库,而是自己实现了部分STL功能。”
AGG 2.5 License
Anti-Grain Geometry
is an Open Source, free library released under the terms and
conditions of GNU GPL
license.
再看看另外一个大名鼎鼎的绘图引擎Cairo:
“cairo 的目标是以跨平台的方式在打印机和屏幕上产生相同的输出,它正在成为 Linux® 图形领域的重要软件。GNOME、GTK+、Pango 等许多软件已经使用了它提供的 2D 功能。 cairo 是一个免费的矢量绘图软件库,它可以绘制多种输出格式。cairo 支持许多平台,包括 Linux、BSD、Microsoft® Windows® 和 OSX(BeOS 和 OS2 后端也正在开发)。Linux 绘图可以通过 X Window 系统、Quartz、图像缓冲格式或 OpenGL 上下文来实现。另外,cairo 还支持生成 PostScript 或 PDF 输出,从而产生高质量的打印结果。在理想情况下,cairo 的用户可以在打印机和屏幕上获得非常接近的输出效果。”
“cairo 的一项主要设计目标是提供尽可能接近的输出。这种一致的输出使 cairo 非常适合 GUI 工具集编程和跨平台应用程序开发。使用同一个绘图库打印高分辨率的屏幕和绘制屏幕内容,这种功能具有显著的优点。另外,在支持的每种目标平台上,cairo 尝试智能化地使用底层硬件和软件支持。高质量矢量图形和高性能的结合使 cairo 成为优秀的 UNIX® 绘图系统。”
“cairo 是用 C 编写的,但是为大多数常用的语言提供了绑定。选用 C 语言有助于创建新的绑定,同时在进行 C 语言调用时可以提供高性能。应该特别注意 Python 绑定,它支持快速原型开发,而且降低了学习 cairo 绘图 API 的门槛。 ”
Cairo is free software
and is available to be redistributed
and/or modified under the terms of either the GNU Lesser General
Public License (LGPL) version 2.1 or the Mozilla Public License (MPL)
version 1.1 at your option.
原谅我引用了3个段落来描述Cairo这个精巧的东西。因为从网络上搜索得出的结果不成正比的偏向于Cairo。
经过测试分析,我总结出不宜使用AGG的几点原因:
1)AGG是C++编写的,因此,它不能被C语言很好地调用。由于
其中使用了大量的现代标准C++语言的语法规则,包括模板、仿函数等处理
,导致这样的库的学习过程将是痛苦的。
2)AGG采用的版权协议是GNU GPL的。而Cairo至少是LGPL的。AGG采用的协议表明它不适合用于商业的闭源软件开发。
3)Cairo的绘图效率是接近GDI/GDIPlus的。经过优化算法,可以做到完全忽略绘图效率上的差别。
4)AGG自从2006年之后就没有更新过。我怀疑这个社区已经不存在了。对于这样一个发展中的引擎,在长达5年的时间里没有更新,无论如何是说不过去的,也是无法让人信赖的。
5)Cairo社区至今保持着旺盛的生命力。作为名震江湖的FireFox的核心绘图引擎,作为Linux的绘图引擎,我们可以足够信赖它。
6)具体到库中的功能,只有用过才知道孰优孰劣。
7)C语言相比C++更具有简洁和高效的特性。更适合跨平台软件的开发。
当然,我的孤陋寡闻可能导致忽略了目前存在的更优秀的绘图引擎,请您不妨告诉我,这样把它们都加入到这个讨论之中。
最后,请相信Linux的选择,请相信FireFox的选择。同时也是我的选择。
分享到:
相关推荐
Anti-Grain Geometry (AGG). High Fidelity 2D Graphics. A High Quality Rendering Engine for C++.
agg二维绘图工具源码及入门例程及安装开发入门
AGG 是一个开源的二维图形引擎。它提供一套结合了亚像素(subpixel accuracy)技术与反走样(anti-aliasing)技术的图形算法,实现高效率、高质量的二维图形处理功能。AGG 的另一个特点在于它极大的灵活性。其作者将...
agg_v2.0.0.apk
贺德克(HYDAC)Freigabeliste大众AGG液压pdf,贺德克(HYDAC)Freigabeliste大众AGG液压
一个很优秀的2D图形引擎. Anti-Grain Geometry (AGG) - Version 2.5 A high quality rendering engine for C++ Copyright (C) 2002-2006 Maxim Shemanarev
用AGG实现高质量图形输出.zip,AGG图像引擎介绍
保存&分享AGG图形库相关资料,文档+2.5源码
( agg-2.4-2.1.i386.rpm )
•如果要用AGG的控件和窗体,要加入[AGG]\src\ctrl\*.cpp和[AGG]\src\platform\<OS>\*.cpp,头文件在[AGG]\include\ctrl和[AGG]\include\platform里 •如果要用到TrueType字体显示,要加入[AGG]\font_win32_tt目录下...
AGG是一个开源的二维图形引擎,它提供了一个功能有限的SVG解析、渲染工具svg_viewer。我对svg_viewer做了如下改进: - 支持解析 、<ellipse> 元素,以及<rect> 的 rx、ry 属性(圆角矩形)。 - 支持格式为 rgb(ddd...
AGG在windows系统visual studio 2013平台编译及开发;已经上传了编译成功的AGG.lib, 使用时将include文件夹添加到链接库即可。
包括: 基于AGG算法库的通用图形接口设计.pdf AGG绝好资料.doc 介绍和推荐AGG.doc
工程设计资料友新立交工程施工组织设计doc页agg.docx
22.2 方式二、使用字体引擎(Font Engine) 50 22.2.1 头文件 50 22.2.2 类型 50 22.2.3 成员类型 51 22.2.4 成员属性 51 22.2.5 成员方法 51 22.2.6示例代码1 - 从顶点源层输出文字 52 22.2.7 示例代码2 - 从Scanline...
AGG测试,一个AGG的测试事例。一个GDI和AGG在MFC下使用的例子。
开源跨平台2d图形库,agg2.5源码+文档
2d图形开发库AGG,跨平台渲染库,C源代码
AGG,全名:Anti-Grain Geometry,是一个开源的、高效的2D图形库。AGG的功能与GDI+的功能非常类似,但提供了比GDI+更灵活的编程接口,其产生的图形的质量也非常高,而且它是跨平台的,其宣传可以在非常多的操作系统...
agg为开源的高效跨平台2D图形开发库,内部包含了大量的GDI图形绘制源码和示例!