Sono date una immagine (in formato PAM) ed una lista di rettangoli (4 interi). Si invertano i colori dei pixel interni ad un numero dispari di rettangoli.
La lista di rettangoli è data in un file il cui primo valore è il numero di rettangoli, seguito da tante righe quanti sono i rettangoli. Ognuna di queste righe contiene le coordinate di due estremi del rettangolo, separate da punti. Le coordinate sono date in ordine crescente (angolo in alto a sinistra, angolo in basso a destra).
Il programma deve supportare immagini a 3 o 4 canali, e l'inversione dei
colori segue la formula nuovo_valore <- MAX - vecchio_valore per
i primi tre canali, dove MAX è il massimo valore del singolo canale.
BONUS: supportare anche immagini a 1 o 2 canali, invertendo solo il valore del primo canale.
File ausiliari forniti:
loadrects.h: definisce la funzione
int load_rects(const char *fname, int4 **rects)che carica la lista di rettangoli dal file fname, ponendoli nell'array
lineare rects e restituendo il numero di rettangoli caricati, o un numero
negativo in caso d'errore.
pamalign.h: fornisce strutture dati e funzioni per il caricamento ed
il salvataggio di immagini in formato PAM. I dati dell'immagine sono
sempre allineati ad un numero pari di canali (2, 4) anche quando i
canali dell'immagine sono dispari (1, 3).
Strutture definite:
struct imgInfo {
uint width; /* larghezza dell'immagine */
uint height; /* altezza dell'immagine */
uint channels; /* numero di canali reali dell'immagine */
uint maxval; /* massimo valore del singolo canale */
uint depth; /* bits per value */
size_t data_size; /* dimensioni in byte dell'array data */
ushort *data; /* dati */
};
Funzioni definite:
int load_pam(const char *fname, imgInfo *img);
int save_pam(const char *fname, const imgInfo *img);
che hanno come scopo rispettivamente il caricamento ed il salvataggio
dell'immagine dal/sul file fname con dati in img. Le funzioni
restituiscono 0 in caso di successo, 1 in caso di fallimento.
dati d'esempio: immagine e lista rettangoli