天天看點

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,如需轉載請自行聯系原作者

繼續閱讀