本文概述
在这种方法中, 选择区域内的一个点或种子。该点称为种子点。然后使用四个连接的方法或八个连接的方法填充指定的颜色。
洪水填充算法具有许多类似于边界填充的字符。但是这种方法更适合于填充多种颜色的边界。当边界具有多种颜色并且内部要用一种颜色填充时, 我们使用此算法。
在填充算法中, 我们从指定的内部点(x, y)开始, 然后将所有像素值当前均设置为具有所需颜色的给定内部颜色。然后使用4连接或8连接的方法, 逐步浏览像素位置, 直到所有内部点都被重新绘制。
坏处
- 很慢的算法
- 对于大型多边形可能会失败
- 初始像素需要更多有关周围像素的知识。
算法
Procedure floodfill (x, y, fill_ color, old_color: integer)
If (getpixel (x, y)=old_color)
{
setpixel (x, y, fill_color);
fill (x+1, y, fill_color, old_color);
fill (x-1, y, fill_color, old_color);
fill (x, y+1, fill_color, old_color);
fill (x, y-1, fill_color, old_color);
}
}
程序1:要实现4连接的洪水填充算法:
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<dos.h>
void flood(int, int, int, int);
void main()
{
intgd=DETECT, gm;
initgraph(&gd, &gm, "C:/TURBOC3/bgi");
rectangle(50, 50, 250, 250);
flood(55, 55, 10, 0);
getch();
}
void flood(intx, inty, intfillColor, intdefaultColor)
{
if(getpixel(x, y)==defaultColor)
{
delay(1);
putpixel(x, y, fillColor);
flood(x+1, y, fillColor, defaultColor);
flood(x-1, y, fillColor, defaultColor);
flood(x, y+1, fillColor, defaultColor);
flood(x, y-1, fillColor, defaultColor);
}
}
输出:
程序2:要实现8连接的洪水填充算法:
#include<stdio.h>
#include<graphics.h>
#include<dos.h>
#include<conio.h>
void floodfill(intx, inty, intold, intnewcol)
{
int current;
current=getpixel(x, y);
if(current==old)
{
delay(5);
putpixel(x, y, newcol);
floodfill(x+1, y, old, newcol);
floodfill(x-1, y, old, newcol);
floodfill(x, y+1, old, newcol);
floodfill(x, y-1, old, newcol);
floodfill(x+1, y+1, old, newcol);
floodfill(x-1, y+1, old, newcol);
floodfill(x+1, y-1, old, newcol);
floodfill(x-1, y-1, old, newcol);
}
}
void main()
{
intgd=DETECT, gm;
initgraph(&gd, &gm, "C:\\TURBOC3\\BGI");
rectangle(50, 50, 150, 150);
floodfill(70, 70, 0, 15);
getch();
closegraph();
}
输出:
评论前必须登录!
注册