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

简介:

前言

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

函数功能说明

        如下简单介绍一下对于线段的属性设置,主要是调用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采用默认的参数值,线段看以来也是相当平滑的.

开销以及原理

        该类创建一个数组,存储相互依赖的距离,主要是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系统中,当需要渲染复杂的地图,线段的数量是确定的,但是线宽不同。



     本文转自fengyuzaitu 51CTO博客,原文链接: http://blog.51cto.com/fengyuzaitu/1963385 ,如需转载请自行联系原作者



相关文章
|
2天前
|
JSON JavaScript 前端开发
Mr_HJ / form-generator项目文档学习与记录
Mr_HJ / form-generator项目文档学习与记录
|
2月前
|
BI
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示试读版
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示试读版
16 0
|
3月前
|
JavaScript 前端开发
GEE错误——gee错误Line 35: nir.subtract is not a function
GEE错误——gee错误Line 35: nir.subtract is not a function
22 0
|
3月前
|
Python
GEE—关于RSEI生态遥感指数中出现的问题 Layer error: Image.rename: The number of names (1) must match the number of..
GEE—关于RSEI生态遥感指数中出现的问题 Layer error: Image.rename: The number of names (1) must match the number of..
32 0
Google Earth Engine(GEE)——容易犯的错误3(请在select之前使用filter )和(用updateMask()代替mask())、组合reducer的使用!
Google Earth Engine(GEE)——容易犯的错误3(请在select之前使用filter )和(用updateMask()代替mask())、组合reducer的使用!
127 0
Google Earth Engine(GEE)——容易犯的错误3(请在select之前使用filter )和(用updateMask()代替mask())、组合reducer的使用!
|
关系型数据库 MySQL
十一、GROUP_CONCAT的使用
十一、GROUP_CONCAT的使用
406 0
|
SQL Oracle 关系型数据库
跟着吕大师(VAGE)揭密隐含参数:_db_writer_coalesce_area_size
[size=13.913043975830078px]最近在看吕大师的大作《Oracle核心揭密》,这部大作可以与Jonathan Lewis大师的《Oracle Core_ Essential Internals for DBA》相提并论,看了几天收益颇多,哈哈美国有Lewis,中国有VAGE。
跟着吕大师(VAGE)揭密隐含参数:_db_writer_coalesce_area_size
|
存储 算法 NoSQL
No.1 - Apache IoTDB 随笔 - Time Series DBMS 综述(文末彩蛋)
“这是一篇无法一口气读完的、文字过万[正文字数14390]的长文,这是一个无法中途不上厕所就看完的、关于时序数据库的视频[时长111分钟]分享...” [观看视频](https://mp.weixin.qq.com/s/YgnSSahp70iV_X12aYEtPg) 大家好,很开心能够和大家一起交流时序数据库的相关的内容:) **【文末有彩蛋】** ![image.png](https
1387 0
No.1 - Apache IoTDB 随笔 - Time Series DBMS 综述(文末彩蛋)
|
算法 前端开发 Python
DC学院学习笔记(十四):总体、采样及Error Bar
总体、采样及Error Bar的一些知识
1733 0