Ir para conteúdo
Fórum Script Brasil
  • 0

Algoritmo Boundary Fill não está pintando


jierda

Pergunta

Estou fazendo um algoritmo boundary fill usando fila e matriz, mas o programa não está pintando as regiões, só exibe a imagem na cor original (estou usando o code blocks).

Não conheço muito a biblioteca graphics.h, então não sei o que pode estar causando erro..

Desde já agradeço!

int main ()
{

    FILA_SEQ F;
    int pt1, pt2, cor;
    int gd = DETECT, gm;
    inicializa_matriz();
    //imprime();

    printf (" COLORACAO\n\n");
    printf ("De que ponto deseja comecar a coloracao? ");
    scanf ("%d%d", &pt1, &pt2); //pontos de uma matriz 3x3
    printf ("\n\n")
    printf ("0: Preto\n1: Azul \n2: Verde \n3: Ciano \n4: Vermelho \n5: Magenta \n6: Marrom \n7: Cinza claro \n8: Cinza escuro \n9: Azul claro \n10: Verde claro \n11: Ciano claro \n12: Vermelho claro \n13: Magenta claro \n14: Amarelo \n15: Branco ");
    printf ("\n\nE com qual cor? ");
    scanf ("%d", &cor);

    initgraph(&gd, &gm, "C:\\TC\\BGI");

    //matriz de 9 quadrados, com 100 (pixels?) de lado
    rectangle(150,100,250,200);
    rectangle(250,100,350,200);
    rectangle(350,100,450,200);
    rectangle(150,200,250,300);
    rectangle(150,200,350,300);
    rectangle(350,200,450,300);
    rectangle(150,300,250,400);
    rectangle(250,300,350,400);
    rectangle(350,300,450,400);
 
    preenchimento(&F ,pt1, pt2, cor);
    getch();
    closegraph();

    return 0;
}



void inicializa_matriz()
{
    int i, j;
    for (i=1; i<4; i++)
    {
        for (j=1; j<4;j++)
        {
            img[i][j]=0;
        }
}

        for (i=0; i<5; i++)
        {
            img[0][i]=-1;
            img[i][0]=-1;
            img[4][i]=-1;
            img[i][4]=-1;
        }
}
 
void preenchimento (FILA_SEQ *F, int x, int y, int nova_cor)
{
    int cor_atual;
    int p1, p2;
    cor_atual = img[x][y];
    cria_fila(F);
    colorir (F, x, y, nova_cor);
    while(!eh_vazia(F))
    {
        p1=cons_ret(F); //consulto as coordenadas da fila e as removo
        p2=cons_ret(F);

        if (img[p1-1][p2] == cor_atual)
            colorir (F, p1-1, p2, nova_cor);

        if (img[p1][p2+1] == cor_atual)
            colorir (F, p1, p2+1, nova_cor);

        if (img[p1+1][p2] == cor_atual)
            colorir (F, p1+1, p2, nova_cor);

        if (img[p1][p2-1] == cor_atual)
            colorir (F, p1, p2-1, nova_cor);
}
 
void colorir (FILA_SEQ *F, int x, int y, int nova_cor) 
{ 
    int px, py;
    img[x][y]=nova_cor; ins (F, x); //insiro as coordenadas na fila 
    ins (F, y); 
    px = (x-1)*100 + 150; //através dos pts que o usuário inseriu acho os pts para floodfill  
    py = (y-1)*100 + 200; 
    setfillstyle(SOLID_FILL, nova_cor); 
    floodfill(px, py, WHITE);
}
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...