(四连通区域填充示意图)
假设内部表示区域为
G
,其中的像素原有颜色为
G
0
,需要填充的颜色为
G
1
。
算法需要提供一个种子点
(
x
,
y
)
,它的颜色为
G
0
。以四连通区域为例:
具体算法如下
(
四连通区域
)
1. 内部表示区域种子填充算法
Flood_Fill_4(x, y, G0, G1)
{
if(GetPixel(x,y) ==G0 ) // GetPixel(x,y) 返回(x,y)的颜色
{
SetPixel(x, y, G1); //将(x,y)的添上颜色G1
Flood_Fill_4(x-1, y, G0, G1);
Flood_Fill_4(x, y+1, G0, G1);
Flood_Fill_4(x+1, y, G0, G1);
Flood_Fill_4(x, y-1, G0, G1);
}
}
2.
边界表示区域种子填充算法
Fill_Boundary_4_Connnected(x, y, BoundaryColor, InteriorColor)
// (x,y) 种子像素的坐标;
// BoundaryColor 边界像素颜色; InteriorColor 需要填充的内部像素颜色
{
if(GetPixel(x,y) != BoundaryColor && GetPixel(x,y)!= InteriorColor )
// GetPixel(x,y): 返回像素(x,y)颜色
{
SetPixel(x, y, InteriorColor); // 将像素(x, y)置成填充颜色
Fill_Boundary_4Connnected(x, y+1, BoundaryColor, InteriorColor);
Fill_Boundary_4Connnected(x, y-1, BoundaryColor, InteriorColor);
Fill_Boundary_4Connnected(x-1, y, BoundaryColor, InteriorColor);
Fill_Boundary_4Connnected(x+1, y, BoundaryColor, InteriorColor);
}
}