AGG第四课 局限性
1前言
AGG渲染抗鋸齒圖像的邊界,似乎永遠是模糊邊界,經研究,是由于使用亞像素精度反走樣,邊界會有半個像素的模糊。導致多個圖像重疊的邊界出現顏色一樣的問題。正如,作者所言,不要以為采用AGG,就能夠解決一切的問題,正所謂道高一丈,魔高一尺。任何的設計都是折中的方案,對于問題,只能夠采取規避的方式解決。后續將會持續關注AGG的局限性。
2?重疊區域的邊界著色問題
1?代碼展示???
?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));??
? }
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.
轉載于:https://blog.51cto.com/fengyuzaitu/1961152
總結
以上是生活随笔為你收集整理的AGG第四课 局限性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Zuul的了解
- 下一篇: Android_SQLite_升级框架