AGG第三十三课 line_profile_aa 参数分析说明

1 前言

agg::line_profile_aa是agg::renderer_outline_aa渲染线段的属性设置类,aa就是anti-aliased的意思,具有抗锯齿功能。

2 函数功能说明

如下简单介绍一下对于线段的属性设置,主要是调用agg::line_profile_aa对象的成员函数:

agg::line_profile_aa::min_width()

字面上理解就是设置最小线宽。如果指定的线宽小于min_width函数的设置值,线段将会被化成透明色(brightness fading).如果将min_width()设置为零,线段看起来就扭成一团。默认设置为1.

agg::line_profile_aa::smoother_width()

控制线的模糊程度。如果设置为3,厚线看起来相当模糊。这是该算法的一大优势。如果设置为零,将会得到一些楼梯似得折线(regular,terriblystair-looking).默认值是1.0。

agg::line_profile_aa::gamma()

修改抗锯齿的gamma-correction参数值。主要是调用agg_gamma_functions.h文件中的

gamma-functions,当然也可以构建自己的版本。

注意:只有width函数生成线段的轮廓。这意味着如果通过min_width函数,smoother_width,

gamma函数,修改agg::line_profile_aa对象,必须重新调用width函数才能够生效。

scanline rasterizer采用默认的参数值,线段看以来也是相当平滑的.

3 开销以及原理

该类创建一个数组,存储相互依赖的距离,主要是alpha值,实际上是理想线与像素中间的亚像素距离。她意味着该抗锯齿算法是基于距离的,而扫描线(scanline rasterizer)光栅器是基于区域的。所以两者之间是有区别的(可以确定一点她看起来更好些)。同时也意味着创建agg::line_profile_aa需要一些开销。主要是填充尺寸为(width/2+6)的数组。一旦修改了线段的宽度(调用agg::line_profile_aa::width(w)),将会重新进行填充。尽管不是开销太多,但还是会有的。

提供如下的策略方案:

1)可以创建一个line_profile_aa对象,然后需要的时候,调用该对象的width函数修改线宽

2)可以预先创建一些line_profile_aa对象,然后通过agg::renderer_outline_aa::profile

函数,重新设置line_profile_aa的引用。

最后一种方案是一种不错的选择,例如在GIS系统中,当需要渲染复杂的地图,线段的数量是确定的,但是线宽不同。

时间: 2024-11-13 18:13:56

AGG第三十三课 line_profile_aa 参数分析说明的相关文章

NeHe OpenGL教程 第三十三课:TGA文件

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第三十三课:TGA文件 加载压缩和未压缩的TGA文件: 在这一课里,你将学会如何加载压缩和为压缩的TGA文件,由于它使用RLE压缩,所以非常的简单,你能很快地熟悉它的. 我见过很多人在游戏开发论坛或其它地方询问关于TGA读取的问题.

第三十三课:jQuery Deferred

之前我们讲了Mochikit Deferred,JSDeferred,现在讲jQuery Deferred.首先,我们先来讲下他们的区别: 在保存回调函数时,Mochikit Deferred(dojo Deferred)是用一个2维数组保存的,里面的小数组只有两项,一个是成功回调的函数,一个是失败回调的函数. JSDeferred则每个实例都必有ng,ok这两个回调函数. jQuery Deferred则一个_Deferred负责添加成功回调,一个负责添加错误回调. 它们的API区别如下图:

AGG第四十三课 例子image1从椭圆到矩形替换问题

I am basing my code on the images1 example and I have changed the image 'partner' shape from an ellipse to a rectangle. The partner rectangle comes out at X,Y and scales and rotates, but the top left-hand corner of the image is always stuck at (x,y)=

JAVA学习第三十三课(常用对象API)- 集合框架(一)

数字有很多用数组存,对象有很多就要用集合存 但是数组是固定长度的,集合是可变长度的 集合的由来: 对象用来封装特有数据,对象多了需要存储,如果对象个数不确定,就需要使用集合容器来存储 集合的特点: 1.用于存储对象的容器 2.长度可变 3.集合中不可存储基本数据类型 对于集合体系,的最顶层存储的是该体系中所有的共性内容,Collection,同继承一样,看顶层,用底层 java.uitil包中的Cellection 集合容器因为内部的数据不同,有多种具体容器,不断向上抽取,就形成了集合框架 整个

第三十三课 双向循环链表的实现

头结点不位于链表里面,只是用于定位,和内核链表不同. 将LinuxList.h添加到我们的工程中. 再添加一个DualCircleList.h文件: 1 #ifndef DUALCIRCLELIST_H 2 #define DUALCIRCLELIST_H 3 4 #include "LinuxList.h" 5 #include "DualLinkList.h" 6 7 namespace DTLib 8 { 9 10 template < typename

OpenGL教程翻译 第十三课 相机空间

OpenGL教程翻译 第十三课 相机空间 原文地址:http://ogldev.atspace.co.uk/(源码请从原文主页下载) Background 在上几节中我们看见两种类型的顶点变换.第一种类型的变换是改变对象的位置(平移),旋转,尺寸(放缩).这些变换允许我们在3D世界中把一个对象放在任何位置.第二种类型的变换是透视投影变换,把在3D世界坐标系下的顶点位置投影到2D世界坐标系下(比如一架飞机).一旦坐标变换为2D坐标,那么非常容易将这些2D坐标映射到屏幕空间坐标.这些坐标实际上被用来

六周第三次课(1月17日) 9.6/9.7 awk

六周第三次课(1月17日)9.6/9.7awk ==================================================================================================================================================================================================================================

【自动语音识别课程】第二课 语音信号分析

[传送门] [自动语音识别课程]第一课 统计语音识别介绍 原文地址:http://blog.csdn.net/joey_su/article/details/36414877 转载请注明出处,欢迎交流. 概述 针对ASR的语音信号分析 特征 频谱分析 倒谱分析 标准特征:MFCC和PLP分析 动态特征 第一课的结尾提到了语音识别的框图,下图展示了信号分析技术在语音识别系统中的位置: 我们先来认识下语音的产生过程: 语音是在发音器官和声道共同作用下产生的.说话时,声带振动发出具有一定周期特性(基音

数据导入HBase最常用的三种方式及实践分析

数据导入HBase最常用的三种方式及实践分析         摘要:要使用Hadoop,需要将现有的各种类型的数据库或数据文件中的数据导入HBase.一般而言,有三种常见方式:使用HBase的API中的Put方法,使用HBase 的bulk load工具和使用定制的MapReduce Job方式.本文均有详细描述. [编者按]要使用Hadoop,数据合并至关重要,HBase应用甚广.一般而言,需要 针对不同情景模式将现有的各种类型的数据库或数据文件中的数据转入至HBase 中.常见方式为:使用H