AGG第二十八课rasterizer的填充规则-创新互联
AGG提供了很多额外的接口给SVG调用,因此很多的初学者像我,需要先学习SVG,然后了解接口的意义,才能够真正的掌握该接口,例如miter_join的含义。
成都创新互联公司是一家集网站建设,屯昌企业网站建设,屯昌品牌网站建设,网站定制,屯昌网站建设报价,网络营销,网络优化,屯昌网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。1知识储备
字面上理解就是填充的规则,不就是图形的填充吗?哪有什么规则可言。对于单一的图形没有问题,如果是渲染圆环,两个环之间的区域填充颜色,该怎么办?这个时候就需要指定一种规则,一种填充的规则。
AGG提供了两种算法来判断该点是否在填充区域内,如果该点在填充区域,然后填充该点。对于一个简单的无交叉的路径,是非常容易判断的。但是,对于一个复杂的路径,比如自交或者一个路径包裹着另一个子路径,内部就不是那么好理解了。
nonzero
字面意思是“非零”。按该规则,要判断一个点是否在图形内,从该点作任意方向的一条射线,然后检测射线与图形路径的交点情况。从0开始计数,路径从左向右穿过射线则计数加1,从右向左穿过射线则计数减1。得出计数结果后,如果结果是0,则认为点在图形外部,否则认为在内部。
evenodd
字面意思是“奇偶”。按该规则,要判断一个点是否在图形内,从该点作任意方向的一条射线,然后检测射线与图形路径的交点的数量。如果结果是奇数则认为点在内部,是偶数则认为点在外部。
摘自:http://blog.csdn.net/cuixiping/article/details/7848369
2 简单的实例代码
void TestRasFillRule()
{
agg::rendering_buffer &rbuf = rbuf_window();
agg::pixfmt_bgr24 pixf(rbuf);
typedef agg::renderer_base
renderer_base_type renb(pixf);
typedef agg::renderer_scanline_bin_solid
renderder_scanline_type rensl(renb);
agg::rasterizer_scanline_aa<> ras;
agg::scanline_p8 sl;
ras.reset();
renb.clear(agg::rgba8(255,255,255));
rensl.color(agg::rgba8(255,0,0));
//agg::filling_rule_e rule = agg::fill_non_zero;
agg::filling_rule_e rule = agg::fill_even_odd;
ras.filling_rule(rule);
ras.move_to_d(100,100);
ras.line_to_d(200,100);
ras.line_to_d(200,400);
ras.line_to_d(100,400);
ras.close_polygon();
ras.move_to_d(150,250);
ras.line_to_d(180,250);
ras.line_to_d(180,350);
ras.line_to_d(150,350);
ras.close_polygon();
agg::render_scanlines(ras, sl, rensl);
return;
}
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
标题名称:AGG第二十八课rasterizer的填充规则-创新互联
转载来源:http://scjbc.cn/article/dchooh.html