40 lines
2.0 KiB
Markdown
40 lines
2.0 KiB
Markdown
---
|
|
title: Boundary Fill
|
|
---
|
|
|
|
## Boundary Fill
|
|
Boundary fill is the algorithm used frequently in computer graphics to fill a desired color inside a closed polygon having the same boundary
|
|
color for all of its sides.
|
|
|
|
The most approached implementation of the algorithm is a stack-based recursive function.
|
|
|
|
### Working:
|
|
The problem is pretty simple and usually follows these steps:
|
|
|
|
1. Take the position of the starting point and the boundary color.
|
|
2. Decide wether you want to go in 4 directions (N, S, W, E) or 8 directions (N, S, W, E, NW, NE, SW, SE).
|
|
3. Choose a fill color.
|
|
4. Travel in those directions.
|
|
5. If the pixel you land on is not the fill color or the boundary color , replace it with the fill color.
|
|
6. Repeat 4 and 5 until you've been everywhere within the boundaries.
|
|
### Certain Restrictions:
|
|
- The boundary color should be the same for all the edges of the polygon.
|
|
- The starting point should be within the polygon.
|
|
### Code Snippet:
|
|
```
|
|
void boundary_fill(int pos_x, int pos_y, int boundary_color, int fill_color)
|
|
{
|
|
current_color= getpixel(pos_x,pos_y); //get the color of the current pixel position
|
|
if( current_color!= boundary_color || currrent_color != fill_color) // if pixel not already filled or part of the boundary then
|
|
{
|
|
putpixel(pos_x,pos_y,fill_color); //change the color for this pixel to the desired fill_color
|
|
boundary_fill(pos_x + 1, pos_y,boundary_color,fill_color); // perform same function for the east pixel
|
|
boundary_fill(pos_x - 1, pos_y,boundary_color,fill_color); // perform same function for the west pixel
|
|
boundary_fill(pos_x, pos_y + 1,boundary_color,fill_color); // perform same function for the north pixel
|
|
boundary_fill(pos_x, pos_y - 1,boundary_color,fill_color); // perform same function for the south pixel
|
|
}
|
|
}
|
|
```
|
|
From the given code you can see that for any pixel that you land on, you first check whether it can be changed to the fill_color and then you do so
|
|
for its neighbours till all the pixels within the boundary have been checked.
|