/*Realiza a media usando uma matriz NxN  */
 
#define MAX
#include "lib.h"
#include <math.h>


IMAGE  media(IMAGE x,int n)
{
	int i,j,d,k,m ;
	IMAGE newImage;

	d=n/2;

	newImage=newimage(x->info->nr,x->info->nc);

	for (i= 0; i< n; i++)
	  for (j= 0; j < x->info->nc; j++)
	  {
	    newImage->data[i][j] = x->data[i][j];
	    newImage->data[x->info->nr-1-i][j] = x->data[x->info->nr-1-i][j];
	  }
	for (i= 0; i < x->info->nr; i++)
	  for (j= 0; j < n; j++)
	  {
	    newImage->data[i][j] = x->data[i][j];
	    newImage->data[i][x->info->nc-1-j] = x->data[i][x->info->nc-1-j];
	  }

	for (i= 0; i< newImage->info->nr-1-n; i++)
	  for (j= 0; j < newImage->info->nc-1-n; j++){
	    m=0;
	    for (k=0;k<n*n;k++){
	      m+=x->data[i+(k/n)][j+(k % n)];
	    }

	    newImage->data[i+d][j+d] = m/(n*n);
	  } 

	return newImage;
}   
 

main (int argc, char *argv[])
{
	IMAGE x=0;
	IMAGE medImage=0;
	int n;

	if (argc < 3)
	{
	  printf ("Modo de usar: \n media  <image> <n> \n");
	  exit (1);
	}

	sscanf (argv[2], "%d", &n);
	if ((n/2)*2 == n) {
	  printf(" o parametro <n> deve ser um numero impar!\n");
	  exit(2);
	}

	x = Input_PBM (argv[1]);
	if (x == 0)
	{
	  printf ("Arquivo Invalido: ('%s')\n", argv[1]);
	  exit (2);
	}


	printf("Calculando a media usando uma matriz %dx%d\n",n,n);

	medImage=media(x,n);
	Output_PBM (medImage, "media.pgm");
	printf ("Imagem de saida gravada no arquivo: 'media.pgm'\n");
}