Dividir figura em .pnm em fatias

Publicado por Sergio 06/05/2005

[ Hits: 5.340 ]

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

vetex2.c

Quadrado ou retângulo

Calculadora de equações de 2º grau versão 2 (com funções)

SOFTCALC

Simulador de cronômetro


  

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