Algoritmo de relleno de límites

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *