Requisito previo: algoritmo de relleno de inundación , relleno de polígono de línea de escaneo
Introducción: el algoritmo de relleno de límite comienza en un píxel dentro del polígono que se va a llenar y pinta el interior procediendo hacia el exterior hacia el límite. Este algoritmo funciona solo si el color con el que se debe rellenar la región y el color del límite de la región son diferentes. Si el límite es de un solo color, este enfoque avanza píxel por píxel hasta que llega al límite de la región.
El algoritmo de relleno de límites es de naturaleza recursiva.Toma un punto interior (x, y), un color de relleno y un color de límite como entrada. El algoritmo comienza comprobando el color de (x, y). Si su color no es igual al color de relleno y al color del límite, entonces se pinta con el color de relleno y se llama a la función para todos los vecinos de (x, y). Si se encuentra que un punto tiene color de relleno o color de límite, la función no llama a sus vecinos y regresa. Este proceso continúa hasta que se han probado todos los puntos hasta el color límite de la región.
El algoritmo de relleno de límites se puede implementar con 4 píxeles conectados o con 8 píxeles conectados.
4 píxeles conectados:Después de pintar un píxel, se llama a la función para cuatro puntos vecinos. Estas son las posiciones de píxeles que están a la derecha, izquierda, arriba y abajo del píxel actual. Las áreas llenas por este método se llaman 4-conectadas. A continuación se muestra el algoritmo:
Algoritmo:
void boundaryFill4(int x, int y, int fill_color,int boundary_color) { if(getpixel(x, y) != boundary_color && getpixel(x, y) != fill_color) { putpixel(x, y, fill_color); boundaryFill4(x + 1, y, fill_color, boundary_color); boundaryFill4(x, y + 1, fill_color, boundary_color); boundaryFill4(x - 1, y, fill_color, boundary_color); boundaryFill4(x, y - 1, fill_color, boundary_color); } }
C
// C Implementation for Boundary Filling Algorithm #include <graphics.h> // Function for 4 connected Pixels void boundaryFill4(int x, int y, int fill_color,int boundary_color) { if(getpixel(x, y) != boundary_color && getpixel(x, y) != fill_color) { putpixel(x, y, fill_color); boundaryFill4(x + 1, y, fill_color, boundary_color); boundaryFill4(x, y + 1, fill_color, boundary_color); boundaryFill4(x - 1, y, fill_color, boundary_color); boundaryFill4(x, y - 1, fill_color, boundary_color); } } //driver code int main() { // gm is Graphics mode which is // a computer display mode that // generates image using pixels. // DETECT is a macro defined in // "graphics.h" header file int gd = DETECT, gm; // initgraph initializes the // graphics system by loading a // graphics driver from disk initgraph(&gd, &gm, ""); int x = 250, y = 200, radius = 50; // circle function circle(x, y, radius); // Function calling boundaryFill4(x, y, 6, 15); delay(10000); getch(); // closegraph function closes the // graphics mode and deallocates // all memory allocated by // graphics system . closegraph(); return 0; }
C
// C Implementation for Boundary Filling Algorithm #include <graphics.h> // Function for 8 connected Pixels void boundaryFill8(int x, int y, int fill_color,int boundary_color) { if(getpixel(x, y) != boundary_color && getpixel(x, y) != fill_color) { putpixel(x, y, fill_color); boundaryFill8(x + 1, y, fill_color, boundary_color); boundaryFill8(x, y + 1, fill_color, boundary_color); boundaryFill8(x - 1, y, fill_color, boundary_color); boundaryFill8(x, y - 1, fill_color, boundary_color); boundaryFill8(x - 1, y - 1, fill_color, boundary_color); boundaryFill8(x - 1, y + 1, fill_color, boundary_color); boundaryFill8(x + 1, y - 1, fill_color, boundary_color); boundaryFill8(x + 1, y + 1, fill_color, boundary_color); } } //driver code int main() { // gm is Graphics mode which is // a computer display mode that // generates image using pixels. // DETECT is a macro defined in // "graphics.h" header file int gd = DETECT, gm; // initgraph initializes the // graphics system by loading a // graphics driver from disk initgraph(&gd, &gm, ""); // Rectangle function rectangle(50, 50, 100, 100); // Function calling boundaryFill8(55, 55, 4, 15); delay(10000); getch(); // closegraph function closes the // graphics mode and deallocates // all memory allocated by // graphics system . closegraph(); return 0; }
Publicación traducida automáticamente
Artículo escrito por aganjali10 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA