È data una immagine (in formato PAM) ed il lato di un blocco quadrato di pixel. Lo studente scriva un programma che legga l'immagine data e ne trasponga ogni blocco di pixel.
Il programma deve supportare immagini a 3 o 4 canali. Si può assumere che il lato del blocco di pixel divida esattamente la dimensione dell'immagine (ad esempio se i blocchi sono 8×8, l'immagine avrà dimensioni multiple di 8). Si può assumere che un blocco di pixel possa essere caricato per intero in shared memory.
IMPORTANTE: l'immagine non deve venire trasposta per intero (quindi da una immagine 1024×768 si otterrà una immagine 1024×768 e non 768×1024).
File ausiliari forniti:
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, da trasporre a blocchi di dimensione 16×16.