/*
 *  Created by Jeremie Dequidt on 20/10/11.
 *  Projet IMA 2012 / Polytech'Lille
 */
 
#ifndef __ALGO_IMA14_H__
#define __ALGO_IMA14_H__

#include <png_list.h>

/* 
 ******************************************************** 
 *                       Avant-propos                   *
 ********************************************************
 *
 * Les fonctions declarees ci-dessous vous permettent de 
 * facilement charger et sauvegarder des images PNG. 
 * Les fonctions de chargement et d'initialisation
 * utilisent de maniere intensive les pointeurs et 
 * prennent en charge les allocations memoires necessaires
 * au stockage des images.
 *
 * De maniere a ne pas alourdir inutilement la complexite
 * du projet, les images sont toutes converties en N&B (ou
 * niveau de gris) en suivant la recommendation 709 de la 
 * CIE: http://fr.wikipedia.org/wiki/Rec._709
 * Ceci permet de n'avoir qu'un canal a gerer (intensite
 * de gris, 0 = noir, 255 = blanc) par pixel. 
 *
 * 
 * Pour ceux qui veulent aller plus loin: la bibliotheque
 * fournie est deja compilee. Le code source est cependant
 * disponible (il suffit de m'en faire la demande) si jamais
 * vous souhaitez etendre ce projet aux images couleurs. Dans
 * ce cas vous aurez 3 canaux par pixel: un pour le rouge,
 * un pour le vert, un pour le bleu. Et plutot que de calculer
 * l'intensite moyenne, vous devez determiner la couleur 
 * dominante (voir la page wikipedia
 * http://fr.wikipedia.org/wiki/
 * Extraction_de_caract%C3%A9ristique_en_vision_par_ordinateur
 *  
 * et plus particulierement le paragraphe "Histogramme et derives"
 *
 ********************************************************
 */



/*
 * Initialisation de notre base d'images
 * D: dirName	= nom du repertoire contenant les images
 *				(possibilite d'utiliser un chemin relatif
 *				au repertoire courant ou le chemin absolu)
 * R: bufferBases = pointeur (non-initialise) sur un tableau d'images
 *					(rappel: une image est stockee dans un vecteur
 *					de caracteres non signes)
 * R: valeur de retour de la fonction = nombre d'images dans la base	
 *
 * Chaque image du tableau d'images aura une taille =
 * IMAGE_BASE_SIZE * IMAGE_BASE_SIZE
 *			
 * Exemple d'utilisation:
 *
 *	unsigned char ** b;
 *	unsigned int n;
 *	n = init("monRep", &b);
 *
 */
int init(char * dirName, unsigned char *** bufferBases);

/*
 * Charge une image PNG
 * D: fileName	= nom de l'image (preciser le chemin relatif ou absolu)
 * R: bufferRef = pointeur (non-initialise) sur une image
 *					(rappel: une image est stockee dans un vecteur
 *					de caracteres non signes)
 * R: w			= nombre de colonnes (largeur)
 * R: h			= nombre de lignes (hauteur)		
 * R: valeur de retour de la fonction = 1 si OK, 0 sinon		
 *
 *
 * Exemple d'utilisation:
 *
 *	unsigned char * a;
 *	int b, c, d;
 *	d = chargeImageReference("monImage.png", &a, &b, &c);
 *
 */
int chargeImageReference(char * fileName, unsigned char ** bufferRef, int * w, int * h);

/*
 * Initialise au format PNG une image
 * R: buf 		= pointeur (non-initialise) sur une image (rappel: une image est 
 *					stockee dans un vecteur
 *					de caracteres non signes)
 * D: w			= nombre de colonnes (largeur)
 * D: h			= nombre de lignes (hauteur)		
 * R: valeur de retour de la fonction = 1 si OK, 0 sinon 		
 *
 *
 * Exemple d'utilisation:
 *
 *	unsigned char * a;
 *	int b, c, d;
 *	d = initialiseImageFinale(&a, b, c);
 *	 
 */
int initialiseImageFinale(unsigned char ** buf, int  w, int h);

/*
 * Sauvegarde au format PNG d'une image
 * D: filenName	= nom de l'image (preciser le chemin relatif ou absolu)
 * R: bufferRef = image (rappel: une image est stockee dans un vecteur
 *					de caracteres non signes)
 * R: w			= nombre de colonnes (largeur)
 * R: h			= nombre de lignes (hauteur)	
 * R: valeur de retour de la fonction = 1 si OK, 0 sinon			
 *
 *
 * Exemple d'utilisation:
 *
 *	d = sauvegardeImageFinale("maMozaique.png", a, b, c);
 *		
 */
int sauvegardeImageFinale(char * fileName, unsigned char * bufferRef, int w, int h);


#endif//__ALGO_IMA14_H__