Here you will learn about flood fill algorithm in C and C++.
Flood Fill is a seed fill algorithm similar to Boundary Fill algorithm but sometimes when it is required to fill in an area that is not defined within a single color boundary we use flood fill instead of boundary fill.
For this purpose we can create a function or we can use a predefined function in the graphics.h header file which takes 3 arguments:-
floodfill(x,y,color)
4 Connected Region (Image Source)
In Flood Fill algorithm we start with some seed and examine the neighboring pixels, however pixels are checked for a specified interior color instead of boundary color and is replaced by a new color. It can be done using 4 connected or 8 connected region method.
Below we use 4 connected region recursive algorithm to implement this algorithm.
Algorithm
1. Create a function called as floodFill (x,y,oldcolor,newcolor)
void floodFill(int x,int y,int oldcolor,int newcolor) { if(getpixel(x,y) == oldcolor) { putpixel(x,y,newcolor); floodFill(x+1,y,oldcolor,newcolor); floodFill(x,y+1,oldcolor,newcolor); floodFill(x-1,y,oldcolor,newcolor); floodFill(x,y-1,oldcolor,newcolor); } } //getpixel(x,y) gives the color of specified pixel
2. Repeat until the polygon is completely filled.
3. Stop.
Program for Flood Fill Algorithm in C and C++
C Program
#include<stdio.h> #include<graphics.h> #include<dos.h> void floodFill(int x,int y,int oldcolor,int newcolor) { if(getpixel(x,y) == oldcolor) { putpixel(x,y,newcolor); floodFill(x+1,y,oldcolor,newcolor); floodFill(x,y+1,oldcolor,newcolor); floodFill(x-1,y,oldcolor,newcolor); floodFill(x,y-1,oldcolor,newcolor); } } //getpixel(x,y) gives the color of specified pixel int main() { int gm,gd=DETECT,radius; int x,y; printf("Enter x and y positions for circle\n"); scanf("%d%d",&x,&y); printf("Enter radius of circle\n"); scanf("%d",&radius); initgraph(&gd,&gm,"c:\\turboc3\\bgi"); circle(x,y,radius); floodFill(x,y,0,15); delay(5000); closegraph(); return 0; }
C++ Program
#include<iostream.h> #include<graphics.h> #include<dos.h> void floodFill(int x,int y,int oldcolor,int newcolor) { if(getpixel(x,y) == oldcolor) { putpixel(x,y,newcolor); floodFill(x+1,y,oldcolor,newcolor); floodFill(x,y+1,oldcolor,newcolor); floodFill(x-1,y,oldcolor,newcolor); floodFill(x,y-1,oldcolor,newcolor); } } //getpixel(x,y) gives the color of specified pixel int main() { int gm,gd=DETECT,radius; int x,y; cout<<"Enter x and y positions for circle\n"; cin>>x>>y; cout<<"Enter radius of circle\n"; cin>>radius; initgraph(&gd,&gm,"c:\\turboc3\\bgi"); circle(x,y,radius); floodFill(x,y,0,15); delay(5000); closegraph(); return 0; }
Author Bio:
I am Rahul Maheshwari from India currently pursuing engineering degree in Computer Science. I am passionate about programming and loves to code as much as I can and likes to help people to become better in programming.
Connect with him: Facebook | Linkedin
Comment below if you have queries or found anything incorrect in above flood fill algorithm in C and C++.
maine line Ka piramid draw kiya hai usame color kaise bharu
vishal ek paint brush utha aur screen ko color karde
sahi ha be
pyramid ke andar ka koi bhi point le lo,uske coordinates function me pass krwa dena ,fir koi bhi filling algo laga do
bro what the hell this doesnt help me solve HIKING TRAIL PROBLEM bro please help me?
What is c:\\turboc3\\bgi ?
path of graphics file required to run this program
If you fill with oldColor = newColor won’t it run forever?
thanks.. this is important for me
the codes are really easy to understood but the output is not available
where is output
ONLY HALF OF MY CIRCLE IS GETTING FILLED WHAT SHOULD I DO?