开源2D图形库AGG研究(一)

来源:互联网 发布:汽车电子软件开发 编辑:程序博客网 时间:2024/05/20 07:50

      AGG(Anti-Grain Geometry),强大的2D几何图形库。因为GDI+的一些缺陷(不能跨平台,某些应用场合精度差),我一直在寻求可以替换gdi+绘图组件的方案,最终我选择了AGG,提供亚像素精度显示效果,反锯齿效果超好,跨平台,代码精致亦适合嵌入式开发。网上关于2D图形库的组件非常多,类似的还有GOOGLE PICASSO,CAIRO(firefox底层采用的渲染器),QT,OpenGL等等。从易用性的角度来说AGG比较困难,因为官方只给出了C++源代码,没有组件库和封装好的包,其他语言要想直接用是不可能了。从网上关于使用效果的评论来说,AGG是最高效,跨平台最好的。

      起初学习是从看中文档开始的,在网上有写得比较好的文章(目前最全面的),题目是<<用AGG实现高质量图形输出>>。如果按照文章大致做下来就能对AGG有一个初步了解。参考上述文章,自己动手做一下,感觉稍微能熟悉些,不然直接看源码或英文文档比较累。现在是边用边看源码,翻翻原始文档,感觉学习效率会高一些。因为以前专门写过一段时间的GIS数据格式解析有一定基础(要是参考AGG就好了),再过来看AGG源码,还是比较过瘾的,其间有很多数据结构的写法其实也适用于GIS(例如各种图形对象如何用程序表达)。在我看来AGG的代码结构非常清晰和优美,源码使用C++模版中规中矩(本人非常不赞成奇技淫巧式的C++变态语句)。

      什么样的人适合使用AGG类库?稍微有点计算机图形学基础,但是比较熟悉C++的人适合上手。其实一般的开发基本用不上AGG类库,因为太多人去搞应用开发,很少人会关注绘图质量,图像变换的底层实现了。AGG的绘图质量的确很好,在用户列表中有PDFNet,该公司的SDK产品被AutoDesk公司采用了,而此SDK的底层就是采用的AGG图形库。AGG类库非常用于图形学实践,熟悉了源码可以自己在现有类的基础上进行扩展。

      介绍了这么多AGG背景,开始学习使用AGG吧。第一步,Hello World ?不,我们需要下载源码。目前最新版本是2.5在以下网址下载 http://www.antigrain.com/download/index.html。下载后直接解压,文件夹中罗列了一堆的.cpp、.h文件。当然我们的开发环境是VC6.0,所以我们下载的是Windows版本。

     1、VC6.0下新建一个Windows Console工程,名称随便起,姑且叫AggTest.

     2、关键步骤,设置AGG类库的引用,最野蛮和最有效的方式把Include下的.h文件连同其下文件夹全部拷贝到VC6安装目录下的Microsoft Visual Studio/VC98/Include文件夹中,把解压目录中的src文件夹下的cpp文件都添加到AggTest工程中。

    3、拷贝如下代码到你的AggTest.cpp文件中

        

      4、编译,当然通不过,你懂的。第一步,如果还有文件(如agg_platform_support.cpp)没有找到,你需要添加到工程中。第二步,报错后,看看是不是有两处地方没有修改,stdafx.h是不是注释掉了(纯C++么);是不是按下图设置了VC6下.cpp的设置。

      5、这下终于可以编译通过了,恭喜你程序上可以看到如下内容:

 

 

      环境配置还是比较简单的,能够成功运行的程序是对我们极大的鼓励下,后续我们开始研究代码。