第三节 区域填充算法      
             
 
    利用区域的连通性进行区域填充,除了需要区域应该明确定义外,还需要事先给定一个区域内部象素,这个象素称为种子
    做区域填充时,要进行对光栅网格的遍历,找出由种子出发能达到而又不穿过边界的所有象素。
    这种利用连通性的填充,其主要优点是不受区域不规则性的影响,主要缺点是需要事先知道一个内部象素。
void Floodfill(int x,int y,COLORREF oldvalue,COLORREF newvalue)
/*(x,y)为种子 oldvalue是原值 newvalue是新值,应不等于原值。*/
{ if (GetPixel(x,y) == oldvalue)
{ SetPixel(x,y,newvalue);//赋值为新值
    Floodfill(x,y-1,oldvalue,newvalue);//四向扩散    
    Floodfill(x,y+1,oldvalue,newvalue);
    Floodfill(x-1,y,oldvalue,newvalue);
    Floodfill(x+1,y,oldvalue,newvalue);
}
}
void Boundaryfill(int x,int y,COLORREF boundaryvalue,COLORREF newvalue)
/*(x,y) 为种子位置boundaryvalue是边界象素值newvalue是区域内象素新值,未填充前区域内不应有值为newvalue的象素。*/
{ if( GetPixel(x,y)!=boundaryvalue && GetPixel(x,y)!=newvalue)
// 未达边界且未访问过
{
    SetPixel(x,y,newvalue);//赋以新值
    Boundaryfill(x,y-1,boundaryvalue,newvalue); //向四个方向扩散
    Boundaryfill(x,y+1,boundaryvalue,newvalue);
    Boundaryfill(x-1,y,boundaryvalue,newvalue);
    Boundaryfill(x+1,y,boundaryvalue,newvalue);
}
}
   
  上一页 | 下一页  
  第一节 直线扫描转换算法
第二节 圆的扫描转换算法
第三节 区域填充算法
第四节 多边形的扫描转换算法