本章提供了采用新的線段渲染算法的例子,相比于已經實作的stroke管道算法,平均提高了2倍的速度,最好的情況下是2.6倍加速度。當然這種算法應用在細線上速度才會快,最好是小于2個像素。
在其他的章節中會跟conv_stroke進行效率的對比。同樣的避免不了引入更多的限制,這一點可以在下面了解到。多說一句:conv_stroke是最昂貴的轉換器。
#include"agg/include/agg_rasterizer_outline_aa.h"
#include"agg/include/agg_renderer_outline_aa.h"
1)最大的線寬已經被寫死了,最大值是128個像素,在agg::line_interpolator_aa_base類中
定義,聲明的變量是max_half_width.
2)線段的連結方式隻能是miter.如果渲染的線比較厚,并且線與線之間的夾角非常尖銳,線段之間的連接配接方式可能就沒有conv_stroke生成的準确。雖說在渲染厚線的時候不是要求太苛刻
3)線段端點的行傳隻能夠是butt_cap或者round_cap.除此之外,butt_cap不是抗鋸齒的。round_cap看起來好些,但是影響性能,尤其是你渲染虛線的時候(虛線占6像素,間距是3像素,大概慢1.5倍)
如果渲染長線,那就不需要那麼苛刻。調用agg::rasterizer_outline_aa::round_cap(true/false)設定。
4)在渲染一些小的圖形輪廓線,效果不是很好。但是在渲染地圖,字元,圖像,oscilloscopes等表現的也已經很完美了。
5)當然都說是渲染線段的算法,自然就不會渲染點了。
1)簡單執行個體
agg::rendering_buffer&rbuf = rbuf_window();
agg::pixfmt_bgr24 pixf(rbuf);
typedef agg::renderer_outline_aa<agg::pixfmt_bgr24> renderer_type;
agg::line_profile_aa profile;
profile.width(5);//設定線寬
renderer_type ren(pixf,profile);
typedef agg::rasterizer_outline_aa<renderer_type> rasterizer_type;
rasterizer_type ras(ren);
ren.color(agg::rgba8(255,0,0));//設定線段的顔色
ras.move_to_d(100,100);
ras.line_to_d(500,500);
ras.render(false);
2)可供選擇
agg::rendering_buffer &rbuf = rbuf_window();
agg::pixfmt_bgr24 pixf(rbuf);
typedef agg::renderer_outline_aa<agg::pixfmt_bgr24> renderer_type;
agg::line_profile_aa profile;
profile.gamma(agg::gamma_power(1.2));//可選
profile.min_width(0.75);//可選
profile.smoother_width(0);//可選
profile.width(5);//強制性,要求設定線寬
renderer_type ren(pixf,profile);
typedef agg::rasterizer_outline_aa<renderer_type> rasterizer_type;
rasterizer_type ras(ren);
ras.round_cap(false);//設定線段端點行傳可選
ren.color(agg::rgba8(255,0,0));//設定顔色,可選
ras.move_to_d(100,100);
ras.line_to_d(500,500);
ras.line_to_d(300,400);
ras.render(false);//強制性,是否圍成閉合的曲線,false繪制折線
3)調用add_path添加頂點源,可以不調用ras.render
profile.width(5);//強制性要求設定線寬
ras.round_cap(false);////可選
ren.color(agg::rgba8(255,0,0));//可選
agg::path_storage ps;
ps.move_to(600,600);
ps.line_to(600,100);
ras.add_path(ps);
郵件的詳細資訊:
http://sourceforge.net/p/vector-agg/mailman/vector-agg-general/?viewmonth=200309&page=1
本文轉自fengyuzaitu 51CTO部落格,原文連結:http://blog.51cto.com/fengyuzaitu/1963384,如需轉載請自行聯系原作者