#include "ConvoBis.h"

//Fonction de convolution d'image par un masque
Piquesel **ConvoBis(Piquesel** tableau,float **masque,int taille0,int taille1){
	
	int i,j;
		
	printf("%f %f %f\n%f %f %f\n%f %f %f\n",masque[0][0],masque[0][1],masque[0][2],masque[1][0],masque[1][1],masque[1][2],masque[2][0],masque[2][1],masque[2][2]);
		
		
		
	float norm= fabs(masque[0][0]+masque[0][1]+masque[0][2]+masque[1][0]+masque[1][1]+masque[1][2]+masque[2][0]+masque[2][1]+masque[2][2]);
	if ((int) norm==0){
		norm=1.;
	}
	Piquesel **image = malloc(sizeof(Piquesel*) * taille1);
	for (i=0 ; i<taille1 ; i++){
		image[i] = malloc(sizeof(Piquesel) * taille0);
		for (j=0; j<taille0; j++){	
			if (i==0){
				if (j==0){
					image[i][j].Red=((int) fabs((tableau[taille1+i-1][j].Red*masque[0][1]+tableau[taille1+i-1][j+1].Red*masque[0][2]+tableau[i][j].Red*masque[1][1]+tableau[i][j+1].Red*masque[1][2]+tableau[i+1][j].Red*masque[2][1]+tableau[i+1][j+1].Red*masque[2][2]+tableau[taille1+i-1][taille0+j-1].Red*masque[0][0]+tableau[i][taille0+j-1].Red*masque[1][0]+tableau[i+1][taille0+j-1].Red*masque[2][0])/norm));
					image[i][j].Green=((int) fabs((tableau[taille1+i-1][j].Green*masque[0][1]+tableau[taille1+i-1][j+1].Green*masque[0][2]+tableau[i][j].Green*masque[1][1]+tableau[i][j+1].Green*masque[1][2]+tableau[i+1][j].Green*masque[2][1]+tableau[i+1][j+1].Green*masque[2][2]+tableau[taille1+i-1][taille0+j-1].Green*masque[0][0]+tableau[i][taille0+j-1].Green*masque[1][0]+tableau[i+1][taille0+j-1].Green*masque[2][0])/norm));
					image[i][j].Blue=((int) fabs((tableau[taille1+i-1][j].Blue*masque[0][1]+tableau[taille1+i-1][j+1].Blue*masque[0][2]+tableau[i][j].Blue*masque[1][1]+tableau[i][j+1].Blue*masque[1][2]+tableau[i+1][j].Blue*masque[2][1]+tableau[i+1][j+1].Blue*masque[2][2]+tableau[taille1+i-1][taille0+j-1].Blue*masque[0][0]+tableau[i][taille0+j-1].Blue*masque[1][0]+tableau[i+1][taille0+j-1].Blue*masque[2][0])/norm));
				}else{
					if (j==taille0-1){
						image[i][j].Red=((int) fabs((tableau[taille1+i-1][j].Red*masque[0][1]+tableau[taille1+i-1][j+1-taille0].Red*masque[0][2]+tableau[i][j].Red*masque[1][1]+tableau[i][-taille0+j+1].Red*masque[1][2]+tableau[i+1][j].Red*masque[2][1]+tableau[i+1][-taille0+j+1].Red*masque[2][2]+tableau[taille1+i-1][j-1].Red*masque[0][0]+tableau[i][j-1].Red*masque[1][0]+tableau[i+1][j-1].Red*masque[2][0])/norm));
						image[i][j].Green=((int) fabs((tableau[taille1+i-1][j].Green*masque[0][1]+tableau[taille1+i-1][j+1-taille0].Green*masque[0][2]+tableau[i][j].Green*masque[1][1]+tableau[i][-taille0+j+1].Green*masque[1][2]+tableau[i+1][j].Green*masque[2][1]+tableau[i+1][-taille0+j+1].Green*masque[2][2]+tableau[taille1+i-1][j-1].Green*masque[0][0]+tableau[i][j-1].Green*masque[1][0]+tableau[i+1][j-1].Green*masque[2][0])/norm));
						image[i][j].Blue=((int) fabs((tableau[taille1+i-1][j].Blue*masque[0][1]+tableau[taille1+i-1][j+1-taille0].Blue*masque[0][2]+tableau[i][j].Blue*masque[1][1]+tableau[i][-taille0+j+1].Blue*masque[1][2]+tableau[i+1][j].Blue*masque[2][1]+tableau[i+1][-taille0+j+1].Blue*masque[2][2]+tableau[taille1+i-1][j-1].Blue*masque[0][0]+tableau[i][j-1].Blue*masque[1][0]+tableau[i+1][j-1].Blue*masque[2][0])/norm));
					}else{
						image[i][j].Red=((int) fabs((tableau[taille1+i-1][j].Red*masque[0][1]+tableau[taille1+i-1][j+1].Red*masque[0][2]+tableau[i][j].Red*masque[1][1]+tableau[i][j+1].Red*masque[1][2]+tableau[i+1][j].Red*masque[2][1]+tableau[i+1][j+1].Red*masque[2][2]+tableau[taille1+i-1][j-1].Red*masque[0][0]+tableau[i][j-1].Red*masque[1][0]+tableau[i+1][j-1].Red*masque[2][0])/norm));
						image[i][j].Green=((int) fabs((tableau[taille1+i-1][j].Green*masque[0][1]+tableau[taille1+i-1][j+1].Green*masque[0][2]+tableau[i][j].Green*masque[1][1]+tableau[i][j+1].Green*masque[1][2]+tableau[i+1][j].Green*masque[2][1]+tableau[i+1][j+1].Green*masque[2][2]+tableau[taille1+i-1][j-1].Green*masque[0][0]+tableau[i][j-1].Green*masque[1][0]+tableau[i+1][j-1].Green*masque[2][0])/norm));
						image[i][j].Blue=((int) fabs((tableau[taille1+i-1][j].Blue*masque[0][1]+tableau[taille1+i-1][j+1].Blue*masque[0][2]+tableau[i][j].Blue*masque[1][1]+tableau[i][j+1].Blue*masque[1][2]+tableau[i+1][j].Blue*masque[2][1]+tableau[i+1][j+1].Blue*masque[2][2]+tableau[taille1+i-1][j-1].Blue*masque[0][0]+tableau[i][j-1].Blue*masque[1][0]+tableau[i+1][j-1].Blue*masque[2][0])/norm));
					}
				}
			}else{
				if (i==taille1-1){
					if (j==0){
						image[i][j].Red=((int) fabs((tableau[i-1][j].Red*masque[0][1]+tableau[i-1][j+1].Red*masque[0][2]+tableau[i][j].Red*masque[1][1]+tableau[i][j+1].Red*masque[1][2]+tableau[-taille1+i+1][j].Red*masque[2][1]+tableau[-taille1+i+1][j+1].Red*masque[2][2]+tableau[i-1][taille0+j-1].Red*masque[0][0]+tableau[i][taille0+j-1].Red*masque[1][0]+tableau[-taille1+i+1][taille0+j-1].Red*masque[2][0])/norm));
						image[i][j].Green=((int) fabs((tableau[i-1][j].Green*masque[0][1]+tableau[i-1][j+1].Green*masque[0][2]+tableau[i][j].Green*masque[1][1]+tableau[i][j+1].Green*masque[1][2]+tableau[-taille1+i+1][j].Green*masque[2][1]+tableau[-taille1+i+1][j+1].Green*masque[2][2]+tableau[i-1][taille0+j-1].Green*masque[0][0]+tableau[i][taille0+j-1].Green*masque[1][0]+tableau[-taille1+i+1][taille0+j-1].Green*masque[2][0])/norm));
						image[i][j].Blue=((int) fabs((tableau[i-1][j].Blue*masque[0][1]+tableau[i-1][j+1].Blue*masque[0][2]+tableau[i][j].Blue*masque[1][1]+tableau[i][j+1].Blue*masque[1][2]+tableau[-taille1+i+1][j].Blue*masque[2][1]+tableau[-taille1+i+1][j+1].Blue*masque[2][2]+tableau[i-1][taille0+j-1].Blue*masque[0][0]+tableau[i][taille0+j-1].Blue*masque[1][0]+tableau[-taille1+i+1][taille0+j-1].Blue*masque[2][0])/norm));
					}else{
						if (j==taille0-1){
							image[i][j].Red=((int) fabs((tableau[i-1][j].Red*masque[0][1]+tableau[i-1][-taille0+j+1].Red*masque[0][2]+tableau[i][j].Red*masque[1][1]+tableau[i][-taille0+j+1].Red*masque[1][2]+tableau[-taille1+i+1][j].Red*masque[2][1]+tableau[-taille1+i+1][-taille0+j+1].Red*masque[2][2]+tableau[i-1][j-1].Red*masque[0][0]+tableau[i][j-1].Red*masque[1][0]+tableau[-taille1+i+1][j-1].Red*masque[2][0])/norm));
							image[i][j].Green=((int) fabs((tableau[i-1][j].Green*masque[0][1]+tableau[i-1][-taille0+j+1].Green*masque[0][2]+tableau[i][j].Green*masque[1][1]+tableau[i][-taille0+j+1].Green*masque[1][2]+tableau[-taille1+i+1][j].Green*masque[2][1]+tableau[-taille1+i+1][-taille0+j+1].Green*masque[2][2]+tableau[i-1][j-1].Green*masque[0][0]+tableau[i][j-1].Green*masque[1][0]+tableau[-taille1+i+1][j-1].Green*masque[2][0])/norm));
							image[i][j].Blue=((int) fabs((tableau[i-1][j].Blue*masque[0][1]+tableau[i-1][-taille0+j+1].Blue*masque[0][2]+tableau[i][j].Blue*masque[1][1]+tableau[i][-taille0+j+1].Blue*masque[1][2]+tableau[-taille1+i+1][j].Blue*masque[2][1]+tableau[-taille1+i+1][-taille0+j+1].Blue*masque[2][2]+tableau[i-1][j-1].Blue*masque[0][0]+tableau[i][j-1].Blue*masque[1][0]+tableau[-taille1+i+1][j-1].Blue*masque[2][0])/norm));
						}else{
							image[i][j].Red=((int) fabs((tableau[i-1][j].Red*masque[0][1]+tableau[i-1][j+1].Red*masque[0][2]+tableau[i][j].Red*masque[1][1]+tableau[i][j+1].Red*masque[1][2]+tableau[-taille1+i+1][j].Red*masque[2][1]+tableau[-taille1+i+1][j+1].Red*masque[2][2]+tableau[i-1][j-1].Red*masque[0][0]+tableau[i][j-1].Red*masque[1][0]+tableau[-taille1+i+1][j-1].Red*masque[2][0])/norm));
							image[i][j].Green=((int) fabs((tableau[i-1][j].Green*masque[0][1]+tableau[i-1][j+1].Green*masque[0][2]+tableau[i][j].Green*masque[1][1]+tableau[i][j+1].Green*masque[1][2]+tableau[-taille1+i+1][j].Green*masque[2][1]+tableau[-taille1+i+1][j+1].Green*masque[2][2]+tableau[i-1][j-1].Green*masque[0][0]+tableau[i][j-1].Green*masque[1][0]+tableau[-taille1+i+1][j-1].Green*masque[2][0])/norm));
							image[i][j].Blue=((int) fabs((tableau[i-1][j].Blue*masque[0][1]+tableau[i-1][j+1].Blue*masque[0][2]+tableau[i][j].Blue*masque[1][1]+tableau[i][j+1].Blue*masque[1][2]+tableau[-taille1+i+1][j].Blue*masque[2][1]+tableau[-taille1+i+1][j+1].Blue*masque[2][2]+tableau[i-1][j-1].Blue*masque[0][0]+tableau[i][j-1].Blue*masque[1][0]+tableau[-taille1+i+1][j-1].Blue*masque[2][0])/norm));
						}
					}
				}else{
					if (j==0){
						image[i][j].Red=((int) fabs((tableau[i-1][j].Red*masque[0][1]+tableau[i-1][j+1].Red*masque[0][2]+tableau[i][j].Red*masque[1][1]+tableau[i][j+1].Red*masque[1][2]+tableau[i+1][j].Red*masque[2][1]+tableau[i+1][j+1].Red*masque[2][2]+tableau[i-1][taille0+j-1].Red*masque[0][0]+tableau[i][taille0+j-1].Red*masque[1][0]+tableau[i+1][taille0+j-1].Red*masque[2][0])/norm));
						image[i][j].Green=((int) fabs((tableau[i-1][j].Green*masque[0][1]+tableau[i-1][j+1].Green*masque[0][2]+tableau[i][j].Green*masque[1][1]+tableau[i][j+1].Green*masque[1][2]+tableau[i+1][j].Green*masque[2][1]+tableau[i+1][j+1].Green*masque[2][2]+tableau[i-1][taille0+j-1].Green*masque[0][0]+tableau[i][taille0+j-1].Green*masque[1][0]+tableau[i+1][taille0+j-1].Green*masque[2][0])/norm));
						image[i][j].Blue=((int) fabs((tableau[i-1][j].Blue*masque[0][1]+tableau[i-1][j+1].Blue*masque[0][2]+tableau[i][j].Blue*masque[1][1]+tableau[i][j+1].Blue*masque[1][2]+tableau[i+1][j].Blue*masque[2][1]+tableau[i+1][j+1].Blue*masque[2][2]+tableau[i-1][taille0+j-1].Blue*masque[0][0]+tableau[i][taille0+j-1].Blue*masque[1][0]+tableau[i+1][taille0+j-1].Blue*masque[2][0])/norm));
					}else{
						if (j==taille0-1){
							image[i][j].Red=((int) fabs((tableau[i-1][j].Red*masque[0][1]+tableau[i-1][-taille0+j+1].Red*masque[0][2]+tableau[i][j].Red*masque[1][1]+tableau[i][-taille0+j+1].Red*masque[1][2]+tableau[i+1][j].Red*masque[2][1]+tableau[i+1][-taille0+j+1].Red*masque[2][2]+tableau[i-1][j-1].Red*masque[0][0]+tableau[i][j-1].Red*masque[1][0]+tableau[i+1][j-1].Red*masque[2][0])/norm));
							image[i][j].Green=((int) fabs((tableau[i-1][j].Green*masque[0][1]+tableau[i-1][-taille0+j+1].Green*masque[0][2]+tableau[i][j].Green*masque[1][1]+tableau[i][-taille0+j+1].Green*masque[1][2]+tableau[i+1][j].Green*masque[2][1]+tableau[i+1][-taille0+j+1].Green*masque[2][2]+tableau[i-1][j-1].Green*masque[0][0]+tableau[i][j-1].Green*masque[1][0]+tableau[i+1][j-1].Green*masque[2][0])/norm));
							image[i][j].Blue=((int) fabs((tableau[i-1][j].Blue*masque[0][1]+tableau[i-1][-taille0+j+1].Blue*masque[0][2]+tableau[i][j].Blue*masque[1][1]+tableau[i][-taille0+j+1].Blue*masque[1][2]+tableau[i+1][j].Blue*masque[2][1]+tableau[i+1][-taille0+j+1].Blue*masque[2][2]+tableau[i-1][j-1].Blue*masque[0][0]+tableau[i][j-1].Blue*masque[1][0]+tableau[i+1][j-1].Blue*masque[2][0])/norm));
						}else{
							image[i][j].Red=((int) fabs((tableau[i-1][j].Red*masque[0][1]+tableau[i-1][j+1].Red*masque[0][2]+tableau[i][j].Red*masque[1][1]+tableau[i][j+1].Red*masque[1][2]+tableau[i+1][j].Red*masque[2][1]+tableau[i+1][j+1].Red*masque[2][2]+tableau[i-1][j-1].Red*masque[0][0]+tableau[i][j-1].Red*masque[1][0]+tableau[i+1][j-1].Red*masque[2][0])/norm));
							image[i][j].Green=((int) fabs((tableau[i-1][j].Green*masque[0][1]+tableau[i-1][j+1].Green*masque[0][2]+tableau[i][j].Green*masque[1][1]+tableau[i][j+1].Green*masque[1][2]+tableau[i+1][j].Green*masque[2][1]+tableau[i+1][j+1].Green*masque[2][2]+tableau[i-1][j-1].Green*masque[0][0]+tableau[i][j-1].Green*masque[1][0]+tableau[i+1][j-1].Green*masque[2][0])/norm));
							image[i][j].Blue=((int) fabs((tableau[i-1][j].Blue*masque[0][1]+tableau[i-1][j+1].Blue*masque[0][2]+tableau[i][j].Blue*masque[1][1]+tableau[i][j+1].Blue*masque[1][2]+tableau[i+1][j].Blue*masque[2][1]+tableau[i+1][j+1].Blue*masque[2][2]+tableau[i-1][j-1].Blue*masque[0][0]+tableau[i][j-1].Blue*masque[1][0]+tableau[i+1][j-1].Blue*masque[2][0])/norm));

						}
					}
				}
			}
		}
	}
	free(masque);
	free(tableau);
	return(image);
}
