Dividir figura em .pnm em fatias

Publicado por Sergio 06/05/2005

[ Hits: 5.582 ]

Download prog2




Este programa dado uma imagem *.pnm em formato p2 (grayscale)  faz a divisao em N x M subfiguras. As imagens de saida cujo prefixo para as imagesns de saida e xxx sao colocadas em N x M ficheiros cahamados xxx.1.1.pnm xxx.1.2.pnm ... ... exemplo : divide 2 4 img.pnm out

  



Esconder código-fonte

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXCOL 140

void divide (char *argv[],FILE *f)
{
 FILE *z;
 int i=0,j,colunas,linhas,imgL,imgA,k,ncoluna=0,nlinha=0,b,v,pixel;
 char string [100],strler[100],s[10];
 
 while (fgets (strler,100,f)!=NULL)
    {
     if (strler[0]!='#')
        i++;
     if (i==1)
       fscanf (f,"%d %d", &imgL, &imgA);
    }
 rewind (f);
 if (atoi (argv[1])>imgA || imgA%atoi (argv[1])!=0 || atoi (argv[2])>imgL || imgL%atoi (argv [2])!=0)
      { 
       fprintf(stderr,"erro, insira multiplos da altura e largura da imagem\n");
       exit(2);     
      }
 for (i=1;i<=atoi (argv [1]);i++)
    for (j=1;j<=atoi (argv [2]);j++)
       {
        sprintf (string, "%s.%d.%d.pnm", argv[4], i, j);    
        if ((z=fopen (string,"a+"))==NULL)
           {    
            fprintf (stderr, "erro a abrir o ficheiro %s",string);
            exit (2);
           }
        k=0;
        while ((fgets (strler,100,f)!=NULL) && k<=2)
           {
            if (strler[0]!='#')
               {
                if (k==0)
                   fputs (strler,z);
                if (k==1)   
                   fprintf (z,"%d %d\n",imgL/(atoi (argv[2])),imgA/(atoi (argv[1])));
                if (k==2)
                  fputs (strler,z);
                k++;
               }
            else
               fputs (strler,z);
           }
         for (v=nlinha;v<(imgA/(atoi (argv[1]))+nlinha) && (fgets (strler,100,f)!=NULL);v++) 
             {
              for (b=ncoluna;b<(imgL/(atoi (argv[2]))+ncoluna) ;b++)
                 {
                  fscanf (f," %d", &pixel);
                  fflush (f);
                  sprintf (s,"%d ",pixel);
                  fputs (s,z);
                 }
              fputc ('\n',z);
             }    
         nlinha+= imgA/(atoi (argv[1]));
         ncoluna+= imgL/(atoi (argv[2]));          
         rewind (f); 
         fclose (z);
       } 
}    

int main (int argc, char **argv)
{
 FILE *f;
 char s[MAXCOL];
 if (argc !=5)
   fprintf (stderr, "erro de sintaxe em %s", argv [0]);
 if ((f=fopen(argv[3],"r"))==NULL)
   fprintf (stderr, "erro a abrir o ficheiro %s", argv[3]);
 divide (argv,f);
 return 0;
}   

Scripts recomendados

Uso do Comando Printf

Operações Com Matrizes

Calcula Força Centrípeta

Utilizando ponteiros na manipulação de strings

Relogio


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts