Dividir figura em .pnm em fatias
Publicado por Sergio 06/05/2005
[ Hits: 5.648 ]
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;
}
Resolução de uma fórmula de mátemática
Lista ligada simples, algoritmos de inserção, busca e impressão
Utilização de Ponteiros em C (2)
Nenhum comentário foi encontrado.
Como atualizar sua versão estável do Debian
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Quer auto-organizar janelas (tiling) no seu Linux? Veja como no Plasma 6 e no Gnome
Copiando caminho atual do terminal direto para o clipboard do teclado
Script de montagem de chroot automatica
Conselho distribuiçao brasileira (3)
archlinux resolução abaixou após atualização (15)
Não consigo instalar distro antiga no virtualbox nem direto no hd (33)









