分享

[转]2D图形库-一天一点一滴-搜狐博客

 xrzs 2010-02-22

2009-11-22 | [转]2D图形库

分享
标签: graphic 

    今天想找一个2D图形库,好像比较好的有两个,一个是cairo,另一个是AGG(Anti-Grain Geometry)。这里是一篇介绍文章:http://blog./?p=56


    最近的项目需要找到一款跨平台的 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 的最显著区别时我打了个比方,前者就像是一辆整装待命的国产车,后者就像是一堆精致的进口汽车配件。把前者用起来比较容易,但是可能性能一般;把后者用起来需要花很多时间,还要有专业知识,但是一旦跑起来那就很爽!

  

  其实gtk自带的gdi应该是比较有名的一个。至于2D组件库,gtk、qt应该是比较有名的。有一个开源的3D游戏引擎软件叫irrlicht,里面也带了一个2D组件库。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多