#include "Dil.h"
#define max( a, b ) ( ((a) > (b)) ? (a) : (b) )
//Fonction permettant de récupérer le maximum de 8 chiffres
#define max8(a,b,c,d,e,f,g,h) (max(max(max(a,b),max(c,d)),max(max(e,f),max(g,h))))


//Fonction renvoyant un tableau dilaté
Piquesel **Dil(Piquesel** tableau,int* taille){
int i,j;
	Piquesel **newTabl = malloc(sizeof(Piquesel*) * taille[1]);
	for (i=0 ; i<taille[1] ; i++){
		newTabl[i] = malloc(sizeof(Piquesel) * taille[0]);
	}	
	for (i=0 ; i<taille[1]; i++){
		for (j=0; j<taille[0]; j++){	
			if ( i==0 || i==taille[1]-1 || j==0 || j==taille[0]-1){
				newTabl[i][j].Red=tableau[i][j].Red;
				newTabl[i][j].Green=newTabl[i][j].Red;
				newTabl[i][j].Blue=newTabl[i][j].Red;
			}else{
				newTabl[i][j].Red=max8(tableau[i-1][j-1].Red,tableau[i-1][j].Red,tableau[i-1][j+1].Red,tableau[i][j-1].Red,tableau[i][j+1].Red,tableau[i+1][j-1].Red,tableau[i+1][j].Red,tableau[i+1][j+1].Red);
				newTabl[i][j].Green=newTabl[i][j].Red;
				newTabl[i][j].Blue=newTabl[i][j].Red;
			}

		}
	}
	return(newTabl);
}

//Fonction permettant d'écrire le tableau dilaté dans un fichier
void DilToPPM(Piquesel** tableau,char* sortie,int taille0,int taille1){
	FILE* image = NULL;
	image = fopen(sortie,"w+");
	int i,j;
	int taille[2] = {0};
	taille[0]=taille0;
	taille[1]=taille1;
	
	Piquesel **newTabl = malloc(sizeof(Piquesel*) * taille[1]); //[taille[0]][taille[1]];
	for (i=0 ; i<taille[1] ; i++){
		newTabl[i] = malloc(sizeof(Piquesel) * taille[0]);
	}
	//On applique la dilatation sur le tableau	
	newTabl=Dil(tableau,taille);
	if (image == NULL){
		printf("Impossible d ouvrir le fichier\n");
	}else{
		fprintf(image, "P3\n");
		fprintf(image, "%d %d\n", taille[0],taille[1]);
		fprintf(image, "255\n");
		for (i=0 ; i<taille[1]; i++){
			for (j=0; j<taille[0]; j++){	
				fprintf(image, "%d\n", (newTabl[i][j]).Red);
				fprintf(image, "%d\n", (newTabl[i][j]).Green);
				fprintf(image, "%d\n", (newTabl[i][j]).Blue);
			}
		}
	}
	free(newTabl);
}
	
