#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void le_linha (FILE *_f,char _lin[]) {
//le uma
linha do arquivo
char ch;
int i = 0;
ch = getc(_f);
while ( (ch != EOF) && (ch
!= '\n')) {
_lin[i++] = ch;
//printf
("%c\n", ch);
ch = getc(_f);
}
_lin[i] = '\0';
}
int main (int argc, char *argv[])
{
FILE *fp;
char linha[255];
unsigned int width=0, height=0;
unsigned int *histograma; //
int i, j, k, r, g, b, indice;
histograma = malloc (256*256*256 *
sizeof(int)); //aloca espaco para a matriz
printf ("\nComecando
processamento.\n");
if ((fp=fopen(argv[1],
"r"))== NULL) { //abre arquivo
printf ("O
arquivo nao pode ser aberto");
exit(1);
}
le_linha(fp, linha);
printf ("\nPulando os
comentarios:\n");
le_linha(fp, linha);
while (linha[0] == '#') {
printf
("\t%s\n", linha);
le_linha(fp, linha);
}
printf ("\nDimensoes da imagem:\n");
sscanf (linha, "%d %d",
&width, &height);
printf ("\tlargura: %u\n\taltura:%u\n",
width, height);
printf ("\nValor maximo do
byte que representa cor:\n");
le_linha(fp, linha);
printf ("\t%s\n",
linha);
printf ("\nInicializando
histograma...\n");
for (i = 0; i < 256; i++)
for (j = 0; j <
256; j++)
for (k =
0; k < 256; k++) {
indice
= i*256*256 + j*256 + k;
histograma[indice]
= 0;
}
printf ("\nCalculando histograma...\n");
for (i = 0; i < width; i++) {
for (j = 0; j <
height; j++) {
fscanf (fp,
"%d%d%d", &r, &g, &b); // leu 3 inteiros do arquivo
printf ("(i,j) = (%3d,%3d)\tRGB
= (%3d,%3d,%3d)\t", i, j, r, g, b);
histograma
[r*256*256 + g*256 + b]++;
}
}
printf ("\nHistograma
Calculado.\n");
}