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);
}
Pergunta
jierda
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
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.