您好,登錄后才能下訂單哦!
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.
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。