这个是我第一次发文。非常遗憾的是,图片发不了,所以看不到对比效果。如果要看可以去官网http://www.antigrain.com/

本篇文章来源:http://www.antigrain.com/doc/introduction/introduction.agdoc.html

在这里就能看到图的对比效果了。

外国人的表达习惯和中国有很大的不同,平时我们骂书翻译的差,现在我是真的体会到,有些东西,很难用中国人的表达习惯表达出来。

这一篇是总述部分的第一部分。讲的是AGG的优点,AGG是一个高质量的图形库。它是用标准C和C++写的,所以是跨平台的,甚至可以用在嵌入式系统中。

它的设计上比较松散,不象GDI+之类的有个通用对象,是由一个个有些独立的功能组成的。

它比以往的图形库,质量更高,效果更好,设计上更合理。而且最关键的是它是开源的,我们可以看到它的实现 ,所以我们能学到它不管是设计,还是算法上的东西。比如用到java中,j2me中,虽然它是用C/C++写的。

序言
总述与基本概念

简述

一项新的创举

Anti-Grain Geometry (AGG) 是一个完全用标准和跨平台的C++写的一个图形工具。它可以用在很多需要高质量图形处理的软件中。比如你渲染地图,AGG就是必要的。AGG只使用了C++和标准C运行时函数,象memcpy, sin, cos, sqrt, 等等。 基础算法甚至没有使用C++标准库(Standard Template Library. 所以 AGG c可以用在很多程序中,包括嵌入式系统。

另一方面, AGG 允许你替换库中的任何一个不适合要求的部分. 或者增加其他你需要的颜色空间。这一切都是因为使用了C++的模板(C++ template)机制。

AGG  不是一个紧密的图形库,而且它甚至不是特别容易使用。我认为I  AGG 是一个“创造其他工具的工具. 也就是说没有“Graphics”或者类似的对象。相应的, AGG 由很多松散的独立或者要联合使用的算法组成。所有的算法都有定义的很好的结口和尽可能最小的显式或隐式的独立性.

小评

大部分图形库有一个象GDI+中的 “Graphics”一样的对象,这种对象一般有上百甚至上千个函数。 这种对象可以独立存在,象OpenGL. 几乎所有的图形工具库,包括Java2D, DisplayPDF, SVG, 都有这样一个类。这样操作简单,而且在很多例子中是相当合适的,但是这样却给使用带来了限制.在简单的应用中,这样是合理的。我从来没有见到过一个图形库可以完全合我的需求。而且,所有的图形库都有一个通病。很多功能没什么用,而一些简单的功能反而没有实现。图形引擎(或者图形库)被设计的体积庞大。如果你使用过SVG viewer, ,会发现它的实现很简单而运行良好. 一旦你试图使用一些更先进的东西,比如用不同的图形技术过滤交互,你会发现很多内存泄露甚至挂机。那不是因为不好的设计,而是因为开始就设想把设计搞的很复杂。设计本身成为一个NP复杂问题, 用人脑已经无法解决。

建议

AGG 的主要目的是打破这些陈旧的传统,同时向你展示稳定,浅显,灵活,自由之美。基本观念初看上去和传统的很不同,但是却非常接近STL. 当然,也有些区别STL是一个 C++ 工具 而 AGGC++ 图形库. 你经常在程序中直接使用方便的STL工具. 但是用同样的方法使用AGG不是个好主意。 好的方法是封装AGG 去解决特定的问题. 那这样和GDI+ 有什么区别呢? 首先,你有对这个封装的东西有绝对的控制权。AGGju为你提供了基本算法的集合和灵活的设计。你可以定义接口,转换管道,输出形式。你甚至可以“冒充”已存在的图形接口.比如,你可以使用AGG rasterizer显示图形到屏幕上然后调用Windows GDI打印, 也就是把他们合并在一个API中. 不相信? 看一下GDI+AGG质量上的差别吧:

渲染质量

最关键的是你的程序变得可以移植,如果你设计的足够轻巧. AGG 可以将各种输出组合到同一个API. 特别的, 你可以使用 AGG 产生基于B/S的程序中的服务端中的raster images。它可以是支持多个平台的!

抗锯尺(Anti-Aliasing)和亚像素精确(Subpixel Accuracy)

抗锯尺是一种很好的技术,在低分辨率的设置中,它常被用来提高图片质量。 抗锯尺是建立在人类视觉特性上的。看一下下面的图片,想一想,那说明了什么 .

这是一个用抗锯齿技术写的字. 香农法则中,最大像素频率高于受限制频率。

Now 现在看一下正常尽寸的有相同字的图片,你可以很容易的认出这个单词 “stereo”.图片是完全相同的,第一个是第二个的放大版。看有锯尺的图时,我们根据平时经验,重建失去的内容。抗锯尺不是让你更容易看,可以更好的在你脑中重建失去的细节。这个成果是重要的,比如我们可以画更多的地图的细节。

人类视觉特性,不仅在AGG中应用,这也是我们用亚像素精确作图的基础,特别是画线时。让我们看一下用简单Bresenham 线 和我们用亚像素精确技术的比较 .下图反应了重要区别

A Bresenham Line Rendered with Subpixel Accuracy

比较(2) 和 (3).其中的黑色细线是我们需要的.如果我们使用亚像素精确,尽管线的开始和结束各自是在同一像素中的,我们仍会得到两种不同的像素组成的线(如((2)和(3)),而且重要的是线之间有不同的切线。 如果我们使用传统的Bresenham画法, 如果不使用亚精确像素, 我们会看到这样的结果 。如果不使用亚精确像素, 在所有的情况中我们会看到 (1) 那样的结果。 当我们用小短线组成曲线的时候 这就更重要了。如果我们使用亚象素精确,我们会看到更好的效果,比较一下下面的不同吧。

上面的三个螺旋都是用非常短的线拼接起来的。左边的是我们用一般的Bresenham算法画的, when the coordinates are rounded off to pixels (如果你使用Winwows GDI 的MoveTo/LineTo你会得到相同的效果). 第二个是用了改进的Bresenham 算法,这个 算法使用 一个象素的1/256 . 最右边的是使用相同的1/256的精确度, 但是使用了抗锯尺(Anti-Aliasing. 注意,线的分段是很重要的。如果我们使用常规的象素坐标,即使我们使用抗锯尺技术,但是看上去,还是会象第一个一样难持。

抗锯尺技术在控制线的宽度上,有更重要的作用。只有使用抗锯尺算法才能达到好的效果。在另一方面, 如果我们把线宽设成一个象素,那抗锯尺就没有意义了。抗锯尺和亚象素精度总是协同工作的 。

现代显示器最多有120的打印分辨率(DPI), 但亚象素技术可以达到300 DPI. 下面的图片显示 了线从0.3象素然后以0.3象素增长的状态

用抗锯齿技术和亚象素渲染直线

 

下面是两个更好的例子,用来表现亚象素技术

锯齿技术和亚象素渲染圆

 

可爱的狮子

小狮子比大狮子虽然细节上有些失真,但是总体上还是保持着一致的。

AGG文档翻译(一)相关推荐

  1. 【iOS官方文档翻译】iOS蓝牙的基本概念

    之前写了[iOS官方文档翻译]iOS的蓝牙连接.数据接收及发送一文,介绍了怎样进行蓝牙通讯,但是很多基本概念没有进行解释,看起来可能有点吃力,所以现在再翻译一篇苹果对官方蓝牙4.0一些基本概念介绍的文 ...

  2. Sencha-概念-Layouts(布局)(官网文档翻译8)

    Sencha-概念-Layouts(布局)(官网文档翻译8) 介绍和HBox 布局描述了在您的应用程序的组件的大小和位置.例如,一个电子邮件客户端可能具有固定到左边的消息的列表,以说,可用的宽度的三分 ...

  3. AGG第十一课 agg::ellipse 渲染椭圆和多边形

    8.1引言 圆是椭圆的一种,只不过是长短轴半径相等而已.在AGG中,必须给定椭圆的长短半轴的半径,才能够绘制椭圆.将横坐标半径称为rx,纵坐标半径称为ry.并且可以指定绘制的方向,是顺时针,还是逆时针 ...

  4. python使用pandas计算dataframe中每个分组的分位数极差、分组数据的分位数极差(range)、使用groupby函数和agg函数计算分组的两个分位数

    python使用pandas计算dataframe中每个分组的分位数极差.分组数据的分位数极差(range).使用groupby函数和agg函数计算分组的两个分位数 目录

  5. python使用pandas计算dataframe中每个分组的极差、分组数据的极差(range)、使用groupby函数和agg函数计算分组的最大值和最小值

    python使用pandas计算dataframe中每个分组的极差.分组数据的极差(range).使用groupby函数和agg函数计算分组的最大值和最小值 目录

  6. pandas使用groupby函数和agg函数获取每个分组特定变量独特值的个数(number of distinct values in each group in dataframe)

    pandas使用groupby函数和agg函数获取每个分组特定变量独特值的个数(number of distinct values in each group in dataframe) 目录

  7. pandas使用groupby函数进行分组聚合、使用agg函数指定聚合统计计算的数值变量、并自定义统计计算结果的名称(naming columns after aggregation)

    pandas使用groupby函数进行分组聚合.使用agg函数指定聚合统计计算的数值变量.并自定义统计计算结果的名称(naming columns after aggregation in dataf ...

  8. pandas使用groupby函数进行分组聚合并使用agg函数将每个分组特定变量对应的多个内容组合到一起输出(merging content within a specific column of g

    pandas使用groupby函数进行分组聚合并使用agg函数将每个分组特定变量对应的多个内容组合到一起输出(merging content within a specific column of g ...

  9. pandas使用groupby函数按照多个分组变量进行分组聚合统计、使用agg函数计算分组的多个统计指标(grouping by multiple columns in dataframe)

    pandas使用groupby函数按照多个分组变量进行分组聚合统计.使用agg函数计算分组的多个统计指标(grouping by multiple columns in dataframe) 目录

最新文章

  1. 别让不好意思害了你(不过,别人好意思)
  2. hive导入导出数据案例
  3. PPP协议详细图解实验
  4. Oracle 11g客户端及PLSQL Developer配置|Instant Client Setup-64位|OraClientLite11g_x86
  5. 如何将自己的代码放到github上
  6. ZooKeeper学习-- Zookeeper简单介绍
  7. vue中多行文本标签_vue控制多行文字展开收起的实现示例
  8. Detect to Track and Track to Detect
  9. rc脚本(类的定义与脚本的结构、start方法、stop和status方法、以daemon方式启动)...
  10. python中or是什么意思-Python 中 (,|)和(and,or)之间的区别
  11. Spring AMQP + Rabbit 配置多数据源消息队列
  12. 单webview上拉刷新下拉加载
  13. 【极限精简888M,老机专用】星岚技术 Win7 x64 深度精简版 V2020.10
  14. 微信商户号转账到个人银行卡加密算法及结果查询问题
  15. C语言判断节日思路,C语言 程序设计 节日查询和任务提醒系统-万年历参考.doc
  16. 注册造价工程师用书免费电子版_2019-2020造价工程师各科电子教材精讲高清课件拿来和大家免费分享.......
  17. 不可能得到的最短骰子序列
  18. 什么力量推动了互联网的进化
  19. LeetCode:309. 最佳买卖股票时机含冷冻期(python)
  20. flex布局侧轴(交叉轴)对齐方式

热门文章

  1. 电脑开机出现英文字母开不了机怎么办?收藏好这份实用指南!
  2. HyperWorks学习笔记(六)
  3. 黑马程序员——C基础之石头剪刀布游戏
  4. 计算机信息化办公知识,A013信息化办公
  5. 我打赌五包辣条,如果你知道这四款APP,不管手机再换你总会下载
  6. 为什么有一部分人加了微信,却不愿意和你聊天儿?
  7. 你也想要逃过迷茫期吗?
  8. 彩票开奖系统PHP,彩票开奖API接口_免费数据接口 - 极速数据
  9. 多家“巨头公司”遭受网络攻击,全球数百万用户信息恐遭泄露
  10. 多重网络与计算机之间是感叹号,电脑出现多重网络的原因及解决方法(图)