int main() { int m[MAXLINHA][MAXCOLUNA], linhas, colunas, maiorValor; int c_m[MAXLINHA][MAXCOLUNA], c_linhas, c_colunas, c_maiorValor; char nome_arquivo[MAX_NAME], c_nome_arquivo[MAX_NAME], complemento[MAX_NAME], menu = '9'; int a, b, c, d, t = 0, index_char; printf("Digite o nome do arquivo de entrada: "); scanf("%s", nome_arquivo); while (le_pgm(nome_arquivo, m, &linhas, &colunas, &maiorValor) == 0) { printf("Digite o nome do arquivo de entrada: "); scanf("%s", nome_arquivo); } printf("Arquivo %s.pgm carregado com sucesso.\n", nome_arquivo); imprime_menu(); while(menu != 's') { if (menu == 'c') { printf("Digite o nome do arquivo de entrada: "); scanf("%s", nome_arquivo); if (le_pgm(nome_arquivo, m, &linhas, &colunas, &maiorValor) == 1) { t = 0; printf("Arquivo %s.pgm carregado com sucesso.\n\n", nome_arquivo); } else return 0; } else if (menu == 'a') { imprime_menu(); } else if (menu == 't') { imprime_matriz(m, linhas, colunas); } else if (menu == 'n') { negativo(m, linhas, colunas); complemento[t++] = 'n'; printf("Operacao realizada com sucesso.\n"); } else if (menu == 'r') { rotacao(m, &linhas, &colunas); complemento[t++] = 'r'; printf("Operacao realizada com sucesso.\n"); } else if (menu == 'v') { rebatimentoVertical(m, linhas, colunas); complemento[t++] = 'v'; printf("Operacao realizada com sucesso.\n"); } else if (menu == 'h') { rebatimentoHorizontal(m, linhas, colunas); complemento[t++] = 'h'; printf("Operacao realizada com sucesso.\n"); } else if (menu == 'x') { printf("Informe x superior: "); scanf("%d", &a); printf("Informe y superior: "); scanf("%d", &b); printf("Informe x inferior: "); scanf("%d", &c); printf("Informe y inferior: "); scanf("%d", &d); if (a < 0 || b < 0 || c > (linhas - 1) || d > (colunas - 1) || a > c || b > d) { printf("Limites invalidos\n\n"); } else { corte(m, &linhas, &colunas, a, b, c, d); complemento[t++] = 'x'; printf("Operacao realizada com sucesso.\n"); } } else if (menu == 'e') { printf("Digite o tamanho da janela: "); scanf("%d", &a); while(a < 3 || a > 50) { printf("Tamanho invalido. A janela deve ser entre 3 e 50.\n"); printf("Digite o tamanho da janela: "); scanf("%d", &a); } filtroErosao(m, linhas, colunas, a); complemento[t++] = 'e'; printf("Operacao realizada com sucesso.\n"); } else if (menu == 'd') { printf("Digite o tamanho da janela: "); scanf("%d", &a); while(a < 3 || a > 50) { printf("Tamanho invalido. A janela deve ser entre 3 e 50.\n"); printf("Digite o tamanho da janela: "); scanf("%d", &a); } filtroDilatacao(m, linhas, colunas, a); complemento[t++] = 'd'; printf("Operacao realizada com sucesso.\n"); } else if (menu == 'm') { printf("Digite o tamanho da janela: "); scanf("%d", &a); while(a < 3 || a > 50) { printf("Tamanho invalido. A janela deve ser entre 3 e 50.\n"); printf("Digite o tamanho da janela: "); scanf("%d", &a); } filtroMediana(m, linhas, colunas, a); complemento[t++] = 'm'; printf("Operacao realizada com sucesso.\n"); } else if (menu == 'z') { printf("Digite o tamanho da janela: "); scanf("%d", &a); while(a < 3 || a > 50) { printf("Tamanho invalido. A janela deve ser entre 3 e 50.\n"); printf("Digite o tamanho da janela: "); scanf("%d", &a); } filtroMedia(m, linhas, colunas, a); complemento[t++] = 'z'; printf("Operacao realizada com sucesso.\n"); } else if (menu == '1') { printf("Digite o tamanho da janela: "); scanf("%d", &a); while(a < 3 || a > 50) { printf("Tamanho invalido. A janela deve ser entre 3 e 50.\n"); printf("Digite o tamanho da janela: "); scanf("%d", &a); } printf("Informe o valor de k: "); scanf("%d", &b); filtroBorda1(m, linhas, colunas, a, b); complemento[t++] = '1'; printf("Operacao realizada com sucesso.\n"); } else if (menu == '2') { printf("Digite o tamanho da janela: "); scanf("%d", &a); while(a < 3 || a > 50) { printf("Tamanho invalido. A janela deve ser entre 3 e 50.\n"); printf("Digite o tamanho da janela: "); scanf("%d", &a); } printf("Informe o valor de k: "); scanf("%d", &b); filtroBorda2(m, linhas, colunas, a, b); complemento[t++] = '2'; printf("Operacao realizada com sucesso.\n"); } else if (menu == '3') { printf("Digite o tamanho da janela: "); scanf("%d", &a); while(a < 3 || a > 50) { printf("Tamanho invalido. A janela deve ser entre 3 e 50.\n"); printf("Digite o tamanho da janela: "); scanf("%d", &a); } printf("Informe o valor de k: "); scanf("%d", &b); filtroBorda3(m, linhas, colunas, a, b); complemento[t++] = '3'; printf("Operacao realizada com sucesso.\n"); } else if (menu == 'g') { for(index_char = 0; nome_arquivo[index_char] != 0; index_char++) { c_nome_arquivo[index_char] = nome_arquivo[index_char]; } if (t > 0) c_nome_arquivo[index_char++] = '-'; for(a = 0; a < t; a++) c_nome_arquivo[index_char++] = complemento[a]; while(c_nome_arquivo[index_char] != 0) c_nome_arquivo[index_char++] = 0; grava_pgm(c_nome_arquivo, m, linhas, colunas, maiorValor); printf("%s.pgm\nArquivo %s.pgm gravado com sucesso.\n", c_nome_arquivo, c_nome_arquivo); } else if (menu == 'C') { printf("Digite o nome do arquivo para comparacao: \n"); scanf("%s", c_nome_arquivo); if (le_pgm(c_nome_arquivo, c_m, &c_linhas, &c_colunas, &c_maiorValor) == 1) { if (c_linhas != linhas || c_colunas != colunas) { printf("As matrizes tem dimensoes diferentes.\n"); } else { /* Compara valor a valor e verifica se é igual ou diferente */ c = 1; for(a = 0; a < linhas; a++) { for(b = 0; b < colunas; b++) { if (m[a][b] != c_m[a][b]) { c = 0; break; } } if (c == 0) break; } if (c == 0) printf("As matrizes tem dimensoes diferentes.\n"); else printf("As matrizes sao iguais.\n"); } } else { printf("Falha ao carregar arquivo %s.pgm de comparacao.\n", c_nome_arquivo); } } else if (menu != '9') { printf("Comando invalido\n"); } printf("Digite um comando: "); scanf(" %c", &menu); } return 0; }
void main(int argc, char *argv[]) { char prefixo_arquivo_out[MAX_NAME - 4]; int imagem[MAXLINHA][MAXCOLUNA]; int linhas, colunas, maiorValor, check, larguraJanela, k, limiteValido = 0; const char comandos[] = "nrvhedmz123xctgCas"; char comando = 0; int flag = 0; if (argc < 2) { printf("Usage: %s <arquivo entrada>\n", argv[0]); exit(0); } if (le_pgm(argv[1], imagem, &linhas, &colunas, &maiorValor)) { printf("Arquivo %s.pgm carregado com sucesso.\n", argv[1]); } else { exit(0); } strcpy(prefixo_arquivo_out, argv[1]); void menu(); while (comando != 's') { printf("Digite um comando: "); scanf(" %c", &comando); if (!strchr (comandos, comando)) { printf("Comando invalido\n"); continue; } for (int i = 4; i < 11; i++) { if (comando == comandos[i]) { larguraJanela = 0; while (larguraJanela < JANELA_MIN || larguraJanela > JANELA_MAX) { printf("Digite o tamanho da janela: "); scanf("%d", &larguraJanela); if (larguraJanela < JANELA_MIN || larguraJanela > JANELA_MAX) { printf("Tamanho invalido. A janela deve ser entre %d e %d.\n", JANELA_MIN); } } } } if (comando == '1' || comando == '2' || comando == '3') { printf("Informe o valor de k: "); scanf("%d", &k); } if (comando = 'n') negativo(imagem, linhas, colunas); if (comando = 'r') rotacao(imagem, &linhas, &colunas); if (comando = 'v') rebatimentoVertical(imagem, linhas, colunas); if (comando = 'h') rebatimentoHorizontal(imagem, linhas, colunas); if (comando = 'e') filtroErosao(imagem, linhas, colunas, larguraJanela); if (comando = 'd') filtroDilatacao(imagem, linhas, colunas, larguraJanela); if (comando = 'm') filtroMediana(imagem, linhas, colunas, larguraJanela); if (comando = 'z') filtroMedia(imagem, linhas, colunas, larguraJanela); if (comando = '1') filtroBorda1(imagem, linhas, colunas, larguraJanela, k); if (comando = '2') filtroBorda2(imagem, linhas, colunas, larguraJanela, k); if (comando = '3') filtroBorda3(imagem, linhas, colunas, larguraJanela, k); if (comando = 'a') menu(); if (comando == 'c') { check = 0; while (!check) { printf("Digite o nome do arquivo de entrada: "); scanf("%s", argv[1]); if ((check = le_pgm(argv[1], imagem, &linhas, &colunas, &maiorValor))) printf("Arquivo %s.pgm carregado com sucesso.\n\n", argv[1]); } strcpy(prefixo_arquivo_out, argv[1]); flag = 0; } if (comando == 't') { imprimeMatriz(imagem, linhas, colunas); printf("\n"); } if (comando == 'x') { int xsup, ysup, xinf, yinf; printf("Informe x superior: "); scanf("%d", &xsup); printf("Informe y superior: "); scanf("%d", &ysup); printf("Informe x inferior: "); scanf("%d", &xinf); printf("Informe y inferior: "); scanf("%d", &yinf); if (xsup < 0 || ysup < 0 || xinf >= linhas || yinf >= colunas || xsup > xinf || ysup > yinf) limiteValido = 0; else limiteValido = 1; if (limiteValido) { corte(imagem, &linhas, &colunas, xsup, ysup, xinf, yinf); if (!flag) { strcat(prefixo_arquivo_out, "-"); flag = 1; } strncat(prefixo_arquivo_out, &comando, 1); printf("Operacao realizada com sucesso.\n"); } else { printf("Limites invalidos\n\n"); } } if (comando == 'g') { grava_pgm(prefixo_arquivo_out, imagem, linhas, colunas, maiorValor); printf("%s.pgm\n", prefixo_arquivo_out); printf("Arquivo %s.pgm gravado com sucesso.\n", prefixo_arquivo_out); } if (comando == 'C') { int c[MAXLINHA][MAXCOLUNA]; int linhasC, colunasC, maiorValorC; char prefixo_arquivo_c[MAX_NAME - 4]; posicao erro; check = 0; while (!check) { printf("Digite o nome do arquivo com a imagem a ser comparada: "); scanf("%s", prefixo_arquivo_c); check = le_pgm(prefixo_arquivo_c, c, &linhasC, &colunasC, &maiorValorC); } erro = compara(imagem, c, linhas, linhasC, colunas, colunasC); if (erro.linha == -2 && erro.coluna == -2) { printf("As matrizes sao iguais\n"); } else if (erro.linha == -1 && erro.coluna == -1) { printf("As matrizes tem dimensoes diferentes\n"); } else { printf("As matrizes tem valores diferentes na posicao %d, %d\n", erro.linha, erro.coluna); } } for (int i = 0; i < 11; i++) { if (comando == comandos[i]) { if (flag == 0) { strcat(prefixo_arquivo_out, "-"); flag = 1; } strncat(prefixo_arquivo_out, &comando, 1); printf("Operacao realizada com sucesso.\n"); } } } return; }