AGG第四课局限性

1前言

AGG渲染抗锯齿图像的边界,似乎永远是模糊边界,经研究,是由于使用亚像素精度反走样,边界会有半个像素的模糊。导致多个图像重叠的边界出现颜色一样的问题。正如,作者所言,不要以为采用AGG,就能够解决一切的问题,正所谓道高一丈,魔高一尺。任何的设计都是折中的方案,对于问题,只能够采取规避的方式解决。后续将会持续关注AGG的局限性。

专注于为中小企业提供成都网站设计、网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业庆云免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了成百上千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

2 重叠区域的边界着色问题

1 代码展示   

 void TestBlackBorden()

  {

   agg::rendering_buffer &rbuf = rbuf_window();

   agg::pixfmt_bgr24 pixf(rbuf);

 

   typedef agg::renderer_base renderer_base_type;

   renderer_base_type renb(pixf);

 

   typedef agg::renderer_scanline_aa_solidrenderder_scanline_type;

   renderder_scanline_type rensl(renb);

 

   agg::rasterizer_scanline_aa<> ras;

   agg::scanline_u8 sl;

   ras.reset();

 

   ras.add_path(agg::ellipse(100,150,100,100));

   agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(255,0,0));

   ras.add_path(agg::ellipse(200,100,100,100));

   agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(0,255,0));  

   ras.add_path(agg::ellipse(200,200,100,100));

   agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(0,0,255));  

  }

2 问题描述

三个实心圆形成三个环,并且每个圆有重叠的部分,可以看到重叠的边界出现了黑色的弧线。

按照正常的逻辑,边界不是红色,就是蓝色,或者绿色。实际上出现了混合的颜色,抗锯齿的效果采用混合颜色的方式,将底层的颜色和覆盖的颜色进行了混合(alpha-blending),实际上就会显示混合后的颜色。

 

如下是作者的描述:

I only flipped your p_w_picpath horizontally. Itshows how the colortriplets are

placed and explains this effect. But youare right, these"black borders"

will be seen on any device. To get rid ofthem you need to use gamma

correction. Seeexamples/gamma_correction.cpp.

 

按照作者的思路进行了gamma的设置,当然不排除设置的错误,没有理解gamma_correction这个例子。

开发者回应:

For my display a gamma of 2.5 looks good. Ithink I will add someuser

defined gamma option to my application. Bytime i will have to delve

into this topic more deeply.


名称栏目:AGG第四课局限性
本文地址:http://hbruida.cn/article/pgsgis.html