算法系列之十二:多边形区域填充算法--几种边标志填充算法

本文详细介绍了边界标志填充算法,包括以边为中心的边缘填充算法和栅栏填充算法,以及边标志算法的工作原理和实现。这些算法利用扫描线连贯性思想,通过设置标志和颜色取补来实现多边形的高效填充。文章还讨论了算法的优缺点及可能出现的问题,如重复访问像素和填充错误,并给出了示例代码。
摘要由CSDN通过智能技术生成

四、边界标志填充算法

        在光栅显示平面上,多边形是封闭的,它是用某一边界色围成的一个闭合区域,填充是逐行进行的,即用扫描线逐行对多边形求交,在交点对之间填充。边界标志填充算法就是在逐行处理时,利用边界或边界颜色作为标志来进行填充的。准确地说,边界标志填充算法不是指某种具体的填充算法,而是一类利用扫描线连贯性思想的填充算法的总称。这类算法有很多种,本篇就介绍几种。

        首先介绍一种以边为中心的边缘填充算法,这种边界标志算法的基本思想是:对于每一条扫描线和每一条多边形边的交点(xiyi),将该扫描线上交点右方的所有象素取补,依次对多边形的每条边作此处理,直到最终完成填充。这里要介绍一下取补的定义,假设某点的颜色是M,则对该点的颜色取补得到M’ = A – MA是一个很大的数字,至少要比所有合法的颜色值大。根据取补的定义,如果对光栅位图某区域已经标记为M的颜色值做偶数次取补运算,该区域颜色不变;而做奇数次取补运算,则该区域颜色变为值为M’的颜色。算法可以简单描述为两个步骤:

 

1、将绘图窗口的背景色置为M’颜色;

2、对多边形的每一条非水平边,从该边上的每个象素开始向右求余;

 

算法的处理过程如图(12)所示,左边是多边形的形状,右边分别是对每条边处理完成后填充区域的颜色情况,初始背景颜色是M’,经过处理后,需要填充的区域是奇数次取补,最终的颜色是要填充的正确值M,非填充区域经过偶数次取补,仍然是背景色M’

图(12)边缘填充算法的处理过程

 

        算法的实现非常简单,对于光栅位图的展示,我们仍然采用前文所用的方法,用数字矩阵表示一块光栅位图区域,矩阵的每个位置表示一个像素点,用09表示颜色值。本算法示例用9表示最大值A0表示无效的区域,合法的颜色值就是18

87 void EdgeCenterMarkFill(const Polygon& py, int color)

88 {

89     std::vector<EDGE3> et;

90 

91     InitScanLineEdgesTable(et, py);//初始化边表

92 

93     FillBackg

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吹泡泡的小猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值