AGG第二十八课 rasterizer的填充规则

简介:

  AGG提供了很多额外的接口给SVG调用,因此很多的初学者像我,需要先学习SVG,然后了解接口的意义,才能够真正的掌握该接口,例如miter_join的含义。

1知识储备

       字面上理解就是填充的规则,不就是图形的填充吗?哪有什么规则可言。对于单一的图形没有问题,如果是渲染圆环,两个环之间的区域填充颜色,该怎么办?这个时候就需要指定一种规则,一种填充的规则。

       AGG提供了两种算法来判断该点是否在填充区域内,如果该点在填充区域,然后填充该点。对于一个简单的无交叉的路径,是非常容易判断的。但是,对于一个复杂的路径,比如自交或者一个路径包裹着另一个子路径,内部就不是那么好理解了。

nonzero

字面意思是“非零”。按该规则,要判断一个点是否在图形内,从该点作任意方向的一条射线,然后检测射线与图形路径的交点情况。从0开始计数,路径从左向右穿过射线则计数加1,从右向左穿过射线则计数减1。得出计数结果后,如果结果是0,则认为点在图形外部,否则认为在内部。

evenodd

字面意思是“奇偶”。按该规则,要判断一个点是否在图形内,从该点作任意方向的一条射线,然后检测射线与图形路径的交点的数量。如果结果是奇数则认为点在内部,是偶数则认为点在外部。

摘自:http://blog.csdn.net/cuixiping/article/details/7848369

简单的实例代码

 void TestRasFillRule()

  {

   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_bin_solid<renderer_base_type>renderder_scanline_type;

   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;

 

  }






     本文转自fengyuzaitu 51CTO博客,原文链接:http://blog.51cto.com/fengyuzaitu/1962530,如需转载请自行联系原作者
相关文章
高等数学笔记(一):映射与函数
高等数学笔记(一):映射与函数
|
6月前
|
SQL 算法 vr&ar
☆打卡算法☆LeetCode 175. 组合两个表 算法解析
☆打卡算法☆LeetCode 175. 组合两个表 算法解析
|
存储 开发者
数字音频基础(中)| 学习笔记
快速学习数字音频基础(中),介绍了数字音频基础(中)系统机制, 以及在实际应用过程中如何使用。
数字音频基础(中)| 学习笔记
|
存储 人工智能 算法
数字音频基础(下)| 学习笔记
快速学习数字音频基础(下),介绍了数字音频基础(下)系统机制, 以及在实际应用过程中如何使用。
数字音频基础(下)| 学习笔记
|
编解码 开发者
数字音频基础(上)| 学习笔记
快速学习数字音频基础(上),介绍了数字音频基础(上)系统机制, 以及在实际应用过程中如何使用。
数字音频基础(上)| 学习笔记
|
存储 算法 Java
算法基础(二)| 高精度算法详解
算法基础(二)| 高精度算法详解
189 0
|
Go 开发者
数组应用案例(2)|学习笔记
快速学习数组应用案例(2)。
极值点偏移问题的处理策略及探究(作业帮的毕冶老师总结)(上)
极值点偏移问题的处理策略及探究(作业帮的毕冶老师总结)(上)
292 0
极值点偏移问题的处理策略及探究(作业帮的毕冶老师总结)(上)
极值点偏移问题的处理策略及探究(作业帮的毕冶老师总结)(下)
极值点偏移问题的处理策略及探究(作业帮的毕冶老师总结)(下)
196 0
极值点偏移问题的处理策略及探究(作业帮的毕冶老师总结)(下)
Python编程语言学习:判断两个列表是否对应完全相等(巧解输出是一摸一样的列表数据,但就是不相等)
Python编程语言学习:判断两个列表是否对应完全相等(巧解输出是一摸一样的列表数据,但就是不相等)