/*****************************************************************************
 UNIVERSIDAD DE ZARAGOZA
 DEPARTAMENTO DE INFORMATICA E INGENIERIA DE SISTEMAS
 ASIGNATURA: VISION POR COMPUTADOR
******************************************************************************
 Fichero     :  imagen.h
 Proposito   :  Funciones para manejo de imagenes
 Autor       :  J.D.Tardos & J. Neira & L.M.Cascante
 Fecha       :  16-5-97
******************************************************************************/

/* Constantes */

#define MAX_FILAS      1024
#define MAX_COLUMNAS   1024
#define GRISES         256

/* Tipos */

typedef unsigned char   ELEMENTO;
typedef ELEMENTO    FOTO[MAX_FILAS][MAX_COLUMNAS];
typedef long int    HISTOGRAMA[GRISES];

typedef struct {
      int            filas, columnas;
      FOTO           pixels;
      char           comentario[100];
    } IMAGEN;

typedef IMAGEN IMAGEN_COLOR[3] ;

/* Macros */

#define PIXEL(imagen,i,j)   ((imagen).pixels[i][j])
#define FILAS(imagen)       ((imagen).filas)
#define COLUMNAS(imagen)    ((imagen).columnas)
#define COMENTARIO(imagen)      ((imagen).comentario)

#define H(foto_color,i,j)   PIXEL(foto_color[0],i,j)
#define S(foto_color,i,j)   PIXEL(foto_color[1],i,j)
#define I(foto_color,i,j)   PIXEL(foto_color[2],i,j)
#define R(foto_color,i,j)   PIXEL(foto_color[0],i,j)
#define G(foto_color,i,j)   PIXEL(foto_color[1],i,j)
#define B(foto_color,i,j)   PIXEL(foto_color[2],i,j)


/*****************************************************************************
                              F U N C I O N E S
******************************************************************************/

void inicializar_imagen (IMAGEN *imagen, int filas, int columnas);
void leer_imagen (char *fichero, IMAGEN *imagen);
void escribir_imagen (char *fichero, IMAGEN *imagen);
void ver_imagen (IMAGEN *imagen, char *comentario);
void reproducir_histograma (HISTOGRAMA hist, int umbral, IMAGEN *imagen);
void ver_histograma (HISTOGRAMA hist, int umbral, char *comentario);


void inicializar_imagen_color (IMAGEN_COLOR imagen_color, int filas, int columnas);
void leer_imagen_color (char *fichero, IMAGEN_COLOR imagen_color);
void escribir_imagen_color (char *fichero, IMAGEN_COLOR imagen_color);
void ver_imagen_color (IMAGEN_COLOR imagen_color, char *comentario);
