`
liyiwen007
  • 浏览: 107702 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

开始学习AGG

阅读更多

 

发现一个很“帅”的二维图形库----AGG(Anti-Grain Geometry),汗……其实这是“老”的库了。自己目前还没有深刻的把握,但非常喜欢 AGG 的风格,近期有时间的时候都在看它的源码和网上的一些资料,刚刚开学学还没什么自己的总结,先把我目前的一些信息放上来吧,免得五月份的博文交了白卷。

先把下面一段文字借过来,对 AGG 做一些简单的介绍吧(来自这里):


曾计划用AGG做文档编辑软件的图形内核,读过一段时间它的代码:设计精巧,结构清晰,颇有学术风格,对模板的理念和应用不亚于STL。

(我说:很多人说 AGG “师承” boost,对模板的使用如何如何,但初看过源码之后,觉得 AGG 的代码虽然的确用了很多模板类,但都是非常基本地中规中矩地使用模板,没有任何“技巧”性的代码,模板参数完全是为了作为 Policy 来使用,这点倒更像是师承 loki,正是因为如此,AGG 才有了非常强大和灵活的拆装组合能力,当然也使其更加强以驾驭)

 

AGG的功能与GDI+的功能非常类似,但提供了比GDI+更灵活的编程接口,其产生的图形的质量也非常高,而且它是跨平台的,其宣传可以在非常多的操作系统上运行,我至少在Windows、Wince、Linux三个台平上测试通过。

AGG 的特点:

  1. 支持ALPHA、GAMMA等变色处理,以及用户自定义的变色处理;
  2. 支持任意2D图形变换;
  3. 支持SVG和PostScript描述,适于网上图形生成;
  4. 支持高质量的图形处理,支持反走样插值等高级功能;
  5. 支持任意方式的惭变色处理;
  6. 支持所有颜色格式;
  7. 支持对位图的多种处理;
  8. 支持直线的多种处理,类似于GDI+;
  9. 支持GPC,即通用多边形裁剪方法;
  10. 支持多种字体输出,包括汉字的处理;

(关于 AGG 的效果,我这里只放一个例子,其它的请到官网上观看)

看看同时利用亚像素精度和反锯齿,获得更好的显示效果。

aliased_pix_accuracyaliased_subpix_accuracyanti_aliased

 

这三个螺旋形可以近似的看成是由短的直线段组成的。左边的那幅图采用的是正常的Integer Bresenham方法(使用Windows GDI的LineTo和MoveTo函数也可以得到类似的效果)。中间的图采用了改进后的精度为1/256像素的Integer Bresenham方法。而右边的图同样使用了1/256像素的精度,但是同时还使用了反锯齿。请注意,将线段中亚像素真实定位的能力非常重要。如果我们对正常像素坐标使用反锯齿,那么螺旋形看起来会更平滑,但仍然同左边的图一样难看。

(我说:像这样类似的“惊喜”在 AGG 里还有很多。)

 


 

 

AGG 的官方网在这里:http://www.antigrain.com/index.html

里面最有价值的当然是可以下载到的源码、各种 Examples,还有一些介绍性的文档。它的例子是很酷的,可以下到所有例子的 Exe 文件,直接就可以看到效果。重点推荐要看的是一篇 introduction,把 AGG 的功能以及技术方面的特点都提到了,可以初步体会它的高品质(亚像素描画、奇好的抗锯齿效果、各种颜色空间支持等等),博客园有一份相应的中文版(也就是上面“借用”的文字来源,嘿嘿),好像不是完全的翻译,但重点都已经提到了,翻译的质量很高,值得一看。另外值得一看的就是它的 reference manual 啦,把比较重点的几个库的功能介绍了一下,特别是对于 Span 这个 AGG 里非常重要的元素有相应的图文介绍,在其它地方很难找到。

中文资料里,C++ 编程网的一份教程写得非常捧,它的链接在这里,这篇教程分四个部分,(一)对 AGG 进行了大体的介绍,并讲了如何进行编译的使用,写得很详细,给了一个可以运行的例子,(二)则对于基本的描画类别进行了逐一地分析,(三)讲到了对于图像的处理,最后在 (四)里讲如何用 AGG 显示文字。作者毛毛应该是个强人,呵,在 C++ 编程网中还有一个他写的对于 CImg 的教程,也很好。唯一的“缺点”便是文章网页不是很清爽,广告和其它的链接太多。

虽然 AGG 从 07 年开始就没有更新了,而且听说还有没有解决的 bug ,但我对于这个库的设计非常喜欢,会好好地研究一下,后面我会把自己学习 AGG 的一些笔记和心得也放到博客上来,希望能和有兴趣的朋友进行交流。

分享到:
评论

相关推荐

    AGG图形库资料

    对于希望深入学习AGG并充分利用其功能的人来说,这是一份非常宝贵的资源。 agg-2.5.zip:这是一个包含AGG库版本2.5的源码压缩包。源码分析是理解AGG工作原理的最佳方式,通过查看和学习源码,开发者可以了解到AGG...

    AGG是一个开源、高效的跨平台2D图形库 这是它的离线文档

    开始使用AGG时,首先需要熟悉其基本概念和数据结构,然后根据项目需求选择合适的组件。实践是学习的关键,通过编写小示例程序,逐步掌握AGG的用法。同时,文档中的示例代码是很好的学习材料,它们展示了如何将AGG...

    AGG使用入门

    AGG,全称为Anti-Grain Geometry,是一个开源的2D图形库,主要设计用于C++编程语言。...记住,理论知识结合实际操作是学习AGG的关键,所以不断实践和调试代码,你会逐渐成长为一名熟练的AGG开发者。

    机器学习——无监督学习与预处理

    2. **凝聚聚类**:这是一种层次聚类方法,它从每个数据点作为一个单独的簇开始,逐步合并最相似的簇,直到达到所需的簇数。 - **代码示例**: ```python from sklearn.cluster import AgglomerativeClustering ...

    写给非计算机相关专业的同学——从零开始如何用python处理数据(包括如何安装环境)

    本文将引导你从零开始学习如何使用Python处理数据,并讲解如何搭建Python环境。 首先,让我们从安装Python环境开始。Python官网提供了最新版本的Python解释器下载(https://www.python.org/downloads/)。确保选择...

    Python机器学习项目实例:使用Pyspark进行客户流失分析和模型预测

    在开始分析之前,我们将使用Pandas库加载数据,进行初步的数据清洗和预处理,例如处理缺失值、异常值,以及数据类型转换。 接下来,我们将使用Pyspark来处理大规模数据。Pyspark结合了Python的易用性和Spark的...

    从零基础开始用Python处理Excel数据pdf

    grouped_data = data.groupby('column_name').agg(functions) # 对列进行分组并应用聚合函数 ``` 此外,我们还可以使用pandas进行数据合并和重塑,例如: ```python left = pd.DataFrame({'key': ['K0', 'K1', 'K2...

    错误纠正:Python在机器学习中的应用202005211

    在Python中,机器学习是一个广泛而深入的领域,涉及到各种算法和工具的使用。在这个场景中,我们讨论的是在实际应用中遇到的一些常见错误以及如何修正它们。以下是一些关键知识点的详细说明: 1. **库的导入**:在...

    Matplotlib学习导航.txt

    它由John Hunter在2002年开始开发,以解决在生物物理学研究中数据可视化的需求。如今,Matplotlib已经成为Python科学计算生态系统不可或缺的一部分。 安装Matplotlib是使用它的第一步,可以通过pip包管理器安装,...

    微软MDX的学习笔记

    MDX学习1.doc和MDX学习2.doc这两份文档很可能是对上述概念的详细解释和示例,包括基本语法、常见函数的使用、实际案例分析等内容。对于初学者,理解并掌握这些基础知识,将有助于深入理解和应用MDX进行数据分析。...

    1-1+好的图表示到底是什么?.pdf

    为了解决这个问题,研究者们开始引入信息理论的工具来增强图表示的稳健性。其中,“图信息瓶颈”(Graph Information Bottleneck, GIB)是一个重要的概念,它源自信息论的信息瓶颈原理,旨在通过压缩不必要的信息,...

    k均值、合并聚类和DBSCAN聚类算法对鸢尾花数据集聚类代码.zip

    在机器学习领域,聚类是一种无监督学习方法,主要用于发现数据集中的自然群体或类别,无需预先知道具体的分类标签。本压缩包包含针对鸢尾花数据集的三种聚类算法实现:k均值(K-Means)、合并聚类(Agglomerative ...

    Python库 | aggdraw-1.3.9-cp36-cp36m-macosx_10_6_intel.whl

    aggdraw是Python编程语言中的一个绘图库,它提供了一个高级接口来绘制2D图形,主要基于AGG...虽然它的学习曲线可能比一些简单的绘图库陡峭,但对于需要高效绘制和精细控制图形的项目,aggdraw是一个值得考虑的选择。

    informatica 8 Level I Lab 中文版

    如果桌面没有图标,则通过“开始”菜单找到 Designer 并启动。 #### 五、总结 通过本次实验室的学习,参与者将能够掌握 Informatica PowerCenter 的基本操作方法,包括数据映射的设计、工作流的设计与执行等核心...

    PyPI 官网下载 | aggdirect-ocr-0.1.10.tar.gz

    该库的名称"aggdirect-ocr"中,“agg”可能来源于Agg(Anti-Grain Geometry),这是一个高性能的2D图形库,常用于Python的图像处理库如matplotlib。"direct"可能意味着此库直接与图像数据交互,提供了直接访问和操作...

    python1903笔记 15_pandas.zip

    在学习这个压缩包的内容时,你可以从理解基础数据结构开始,逐步探索更高级的操作,例如数据清洗、数据分析和数据可视化。通过实践,你可以熟练掌握Pandas,并能有效地应用于实际项目中,提升数据处理能力。

    23 - python生鲜电商平台数据分析

    1. **pandas基础**:学习如何使用`pd.read_excel()`函数读取Excel文件,并了解DataFrame的基本操作,如列选择(`.loc`, `.iloc`)、数据过滤(条件查询)、数据聚合(`.groupby()`, `.agg()`)以及数据合并(`.merge...

    04-ArcGIS Python API学习记录–arcgis.geoanalytics模块

    在本篇"04-ArcGIS Python API学习记录–arcgis.geoanalytics模块"中,我们将深入探讨ArcGIS GeoAnalytics Server如何利用Python API处理和分析大数据。GeoAnalytics Server通过分布式计算能力,有效地解决了单台...

    Intro to DataFrames and Spark SQL (training)

    DataFrame的构建可以从各种源开始,如HDFS、Hive表、JSON文件、Parquet文件等。通过SparkSession,我们可以加载数据并进行操作。例如,使用Python API,可以这样创建DataFrame: ```python from pyspark.sql import...

Global site tag (gtag.js) - Google Analytics