现在的位置: 首页 > 综合 > 正文

介绍两个 2D 图形库

2012年09月10日 ⁄ 综合 ⁄ 共 1237字 ⁄ 字号 评论关闭

http://blog.2ndboy.net/%E4%BB%8B%E7%BB%8D%E4%B8%A4%E4%B8%AA-2d-%E5%9B%BE%E5%BD%A2%E5%BA%93/

最近的项目需要找到一款跨平台的 2D 图形库,最好能在使用接口上兼容 MicroSoft 的 GDI+,经过一番搜寻跟对比,总结了一些这方面的信息放在这里做个笔记。

  首先介绍一下 Cairo 库,没听说过没关系,FireFox 总听说过吧?!FireFox 的 render 引擎用的就是这个库。Cairo 是一个跨平台的 2D 图形库,支持很多 GDI+ 的高级特性,比如 Anti-alias,矩阵变换等等,但是据说
Cairo 的效率不是很好
,跟其它库有一定的差距。

  用 Cairo 最爽的地方在于有个跟它相配合的 libGDIPlus 库,这个库对 Cairo 进行了封装,对外提供了一个 GDI+ Flat API 兼容的使用接口,这样就为把 Windows 平台下的 GDI+ 代码移植到 Unix 或者
Mac 平台下提供了一条捷径。

  下面要介绍的是 AGG(Anti-Grain Geometry),这个库貌似效率很好,可以去它的Demo
展示页面
去看看,里面的小例子都非常的酷!

  AGG 也有一个类似于 libGDIPlus 那样的封装,叫做 AggPlus。但是美中不足的是 AggPlus 对 GDI+ 接口的封装充其量只实现了 20%,基本上没有实用价值,但是拿来跟 GDI+ 做性能比较测试还是比较方便的。其实在 AggPlus
的下载包里面就有这么个性能测试程序,在某些基本图形的 render 测试中 AGG 居然比 GDI+ 快 10 倍以上!

  Cairo 跟 AGG 都是非常不错的 2D 图形库,虽然我始终没办法在 Cairo 跟 AGG 之间做性能测试,但是貌似 AGG 比 Cairo 的性能要好;在特性方面,他俩似乎不分伯仲,GDI+ 1.0 里有的 feature 几乎都能在这两个库里找到对应物;在 interface 方面,Cairo + libGDIPlus 是一对黄金搭档,只要你熟悉 GDI+ 的 Flat interface,很快就能把 Cairo 加到自己的项目里面;AGG 的 interface 比较另类,完全基于 C++ Template
写就,基本上属于看了文档还感觉很晕的那种,有人说要想把 AGG 用起来,要有比较好的图形学知识,深以为然!

  从跨平台和编译上比,AGG 全面胜出,在 Windows/Unix/Mac 三个平台下都轻松通过,Cairo 就稍差一点点,在 Windows 平台下需要经过一定的修改(当然首先要熟悉一下才能修改)。在 Windows 下编译 libGDIPlus 貌似就是不可能完成的任务,至少我花了一些时间后放弃了这个念头。

  在跟同事解释 Cairo + libGDIPlus 和 AGG 的最显著区别时我打了个比方,前者就像是一辆整装待命的国产车,后者就像是一堆精致的进口汽车配件。把前者用起来比较容易,但是可能性能一般;把后者用起来需要花很多时间,还要有专业知识,但是一旦跑起来那就很爽!

抱歉!评论已关闭.