本文概述
- 坏处
- 算法
洪水填充算法具有许多类似于边界填充的字符。但是这种方法更适合于填充多种颜色的边界。当边界具有多种颜色并且内部要用一种颜色填充时, 我们使用此算法。
文章图片
【计算机图形(洪水填充算法)】在填充算法中, 我们从指定的内部点(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();
}
输出:
文章图片
推荐阅读
- 计算机扫描线多边形填充算法
- 计算机图形(填充区域基元)
- 计算机图形(中点椭圆算法)
- 计算机图形(三角法)
- 计算机图形(多项式方法)
- 计算机图形中点圆算法
- 布雷森汉姆的循环算法
- 使用极坐标定义一个圆
- 使用多项式方法定义一个圆