Dividir figura em .pnm em fatias
Publicado por Sergio 06/05/2005
[ Hits: 5.582 ]
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
#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;
}   
Utilizando ponteiros na manipulação de strings
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Problemas com Driver NVIDIA (5)
Warcraft II Remastered no Linux? (8)
Instalação dualboot Windows 11 e Debian 13 (7)









