Sono date una immagine (in formato PAM) ed una lista di punti (coppie di interi). Per ciascun punto della lista, si invertano i colori del del pixel corrisponente nell'immagine.
La lista di punti è data in un file in cui il primo valore è il numero di punti nella lista, seguito da tante righe quanti sono i punti. Ognuna di queste righe contiene le coordinate del punto, separate da uno spazio.
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:
loadpts.h
: definisce la funzione
int load_points(const char *fname, int2 **points)
che carica la lista di punti dal file fname
, ponendoli nell'array lineare
points
e restituendo il numero di punti 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 punti