Boundary Fills
Boundary fills start from a point known to be inside of a region
and fill the region until a boundry is found.
A simple recursive algorithm can be used:
public void boundaryFill(int x, int y, int fill, int boundary) {
if ((x < 0) || (x >= raster.width)) return;
if ((y < 0) || (y >= raster.height)) return;
int current = raster.getPixel(x, y);
if ((current != boundary) & (current != fill)) {
raster.setPixel(fill, x, y);
boundaryFill(x+1, y, fill, boundary);
boundaryFill(x, y+1, fill, boundary);
boundaryFill(x-1, y, fill, boundary);
boundaryFill(x, y-1, fill, boundary);
}
}
|
 |
Lecture 8 |
|
Slide 5 |
|
6.837 Fall '98 |
 |
A second important class of area-filling algorithms start at
a point know to be inside a figure and start filling in the figure
outward from the point. Using these algorithms a graphics
artist may sketch the outline of a figure and then select
a color or patten from a menu with which to fill it. The actual
filling process begins when a point inside of the figure is
slected. These routines are like the paint-can function
seen in common interactive paint packages.
The first such method that we will discuss is called the
boundary-fill algorithm. The boundary-fill method
requires the coordinate of a starting point, a fill color, and
a background color as arguments.
public void boundaryFill(int x, int y, int fill, int boundary) {
if ((x < 0) || (x >= raster.width)) return;
if ((y < 0) || (y >= raster.height)) return;
int current = raster.getPixel(x, y);
if ((current != boundary) & (current != fill)) {
raster.setPixel(fill, x, y);
boundaryFill(x+1, y, fill, boundary);
boundaryFill(x, y+1, fill, boundary);
boundaryFill(x-1, y, fill, boundary);
boundaryFill(x, y-1, fill, boundary);
}
}
Note: that this is a recusive routine. Each invocation of
boundaryFill( ) may call itself four more times.
The logic of this routine is very simple. If we are not
either on a boundary or already filled we first fill our point,
and then tell our neighbors to fill themselves.