温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

AGG第四课 局限性

发布时间:2020-07-07 07:41:02 来源:网络 阅读:503 作者:fengyuzaitu 栏目:系统运维

1前言

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

重叠区域的边界着色问题

代码展示   

 void TestBlackBorden()

  {

   agg::rendering_buffer &rbuf = rbuf_window();

   agg::pixfmt_bgr24 pixf(rbuf);

 

   typedef agg::renderer_base<agg::pixfmt_bgr24> renderer_base_type;

   renderer_base_type renb(pixf);

 

   typedef agg::renderer_scanline_aa_solid<renderer_base_type>renderder_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));  

  }

问题描述

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

按照正常的逻辑,边界不是红色,就是蓝色,或者绿色。实际上出现了混合的颜色,抗锯齿的效果采用混合颜色的方式,将底层的颜色和覆盖的颜色进行了混合(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.


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI