AGG反锯齿绘图库的学习笔记(一)

来源:互联网 发布:无主之地2年度版淘宝 编辑:程序博客网 时间:2024/05/19 03:19

    很久不在CSDN上晃了,这几天突发奇想研究了AGG,有些心得,于是想起了CSDN,也算是show一下心得吧!!

    AGG是一个很优秀的反锯齿绘图库,比GDI+要酷很多,也快很多,但是这个东东是出了名的难以使用。我很早就听说了这个NB的东东,据说做地图显示那帮孙子,要不会用AGG,都不好意思和人打招呼,大约 在2008,我尝试研究过几个小时,但是觉得完全无法理解,放弃了。这段时间稍微有些空,突然记起了这个东东,总觉得没搞定它是对自己智商的侮辱,所以我决定搞定它。

    上网查了一下,这么些年,似乎没人留下过如何使用AGG的中文资料,AGG自己的英文文档仍然和2008年的时候一样糟糕,AGG的作者似乎讨厌文档,这么伟大一个软件作品,他留了几千个单词吧(不过他写了很多没有任何说明的例程,没入门的情况下,这些例程简直不是人看的,但执行起来很酷),这似乎是大牛们的一贯做法,“俺创造”,你们来发掘宝藏吧!


   AGG的困难在于它把C++泛型用到了极致,简直过度使用啊,AGG的类型之多,让人首先就晕掉,然后再也没兴趣学习下去,我以极大的毅力坚持了8个小时啊,仅仅搞明白它的体系。

    AGG作者,大拿Maxim Shemanarev说,Microsoft GDI+做的很不好,虽然对用户来说,很容易理解,很好用,但是不能满足2D图像学的要求,出图质量不好,还很慢,于是Maxim Shemanarev化了4年时间(中途歇了两年)做了AGG。做完了他说“Anti-Grain Geometry is not a solid graphic library and it's not very easy to use. I consider AGG as a “tool to create other tools”. It means that there's no “Graphics” object or something like that, instead, AGG consists of a number of loosely coupled algorithms that can be used together or separately. All of them have well defined interfaces and absolute minimum of implicit or explicit dependencies.”(AGG不算一个完整的绘图库,它有点不容易使用,我认为AGG是制造工具的工具,也就是说AGG没有Graphics对象这类的东西,AGG是一系列松散或者紧密耦合的绘图算法集合,这些算法之间都有定义得很好的接口和最优的相关性)

   AGG的确只是一堆反锯齿绘图算法,样条曲线算法,Gamma矫正算法,坐标系变换算法....构成的泛型C++库,幸亏哥对坐标变换矩阵等等数学问题还有些涉猎,对C++也是十数年的历史,否则这堆代码特莫就不是代码,而是一堆数学公式。


AGG提供的图片,表明GDI+的反锯齿做得不好。



AGG的坐标变换系统以及优秀的反锯齿插值算法,可以看出绘制的狮子在尺寸变换的时候失真很小。



原创粉丝点击