Ahahahah..si Eze, faccio ingegneri meccanica Brescia...tu?

Ecco il testo comunque:
DESCRIZIONE GENERALE

Si chiede di sviluppare un programma in linguaggio C in grado di elaborare immagini bitmap con
codifica dei colori RGB con 24 bit per pixel (8 bit per colore) – si riveda la teoria in proposito.

Un’immagine deve essere rappresentata nel programma da una matrice di elementi di tipo Pixel,
definito nel modo seguente:

typedef struct{
unsigned char blue;
unsigned char green;
unsigned char red;
} Pixel;

Si suggerisce di definire ogni matrice con dimensioni fissate a priori, pari alle dimensioni massime
per le immagini accettate dal programma (si definiscano queste costanti mediante la direttiva
#define, ponendole ad esempio pari a 800*600). Ciascuna immagine avrà poi le proprie dimensioni
effettive x e y e sfrutterà quindi per la rappresentazione dei pixel soltanto gli elementi [i][j] con
0<=i<x e 0<=j<y (in altre parole, la sottomatrice di dimensioni x * y).

Il programma deve essere in grado di caricare e salvare un’immagine in formato .bmp (gestito da
tutti i popolari programmi di visualizzazione immagini, ad esempio paint) nella sua forma più
semplice (senza uso di palette). Per gli scopi previsti dall’elaborato, un file bitmap si compone delle
3 parti che seguono (word indica una parola di 2 byte, D-word indica una parola di 4 byte, 0x…
indica una costante in esadecimale) – i valori non indicati devono essere impostati a seconda delle
caratteristiche dell’immagine:

1) TITOLO DEL FILE (lunghezza 14 byte):
word: 0x4D42 //identifica il tipo di file
D-word: //dimensioni totali in byte del file (da calcolare!)
D-word: 0 //riservata (può essere impostata a 0)
D-word: 54 //offset in byte dell’immagine rispetto all’inizio del file

2) TITOLO DELL’IMMAGINE (lunghezza 40 byte):
D-word: 40 //dimensione in byte del titolo immagine
D-word: //numero pixel dell’immagine orizzontali (larghezza immagine)
D-word: //numero pixel dell’immagine verticali (larghezza immagine)
word: 1 //numero piani dell’immagine (nel nostro caso 1)
word: 24 //numero bit per pixel (nel nostro caso 24)
D-word: 0 //compressione (0 se non compresso)
D-word: //dimensione totale della parte “immagine” in byte (vedi dopo)
D-word: 0 //risoluzione orizzontale (pixel/metro) – si può porre a 0
D-word: 0 //risoluzione verticale (pixel/metro) – si può porre a 0
D-word: 0 //numero colori della palette (porre a 0)
D-word: 0 //numero colori importanti della palette (porre a 0)
3) IMMAGINE (lunghezza dipendente dalle dimensioni in pixel dell’immagine)
In questa parte del file sono rappresentati i pixel dell’immagine, dalla riga più in basso alla prima e,
per ciascuna riga, da sinistra verso destra. Ciascun pixel è rappresentato dai 3 byte corrispondenti
alle 3 componenti dei colori primari, nell’ordine blu, verde e rosso. Ciascuna riga di pixel è inoltre
completata da eventuali byte nulli in modo da ottenere un numero di byte multiplo di 4.

Si richiede di sviluppare le funzionalità descritte di seguito:
• Caricamento di un’immagine da un file di nome specificato dall’utente
• Salvataggio di un’immagine su un file di nome specificato dall’utente
• Generazione di un’immagine di prova di dimensioni 512*300 pixel costituita da bande
verticali di 10 pixel successivamente di colori blu, verde e rosso + una linea a 45 gradi.



• Trasformazione dei colori dell’immagine “complementando le componenti”: per ciascun
pixel, la componente blu dovrà diventare 255-blu, la componente verde dovrà diventare 255-
verde, la componente rossa 255-rosso.
• Trasformazione dei colori dell’immagine in “bianco e nero” (o meglio in tonalità di grigio:
si ricordi come è rappresentato il bianco, come è rappresentato il nero e quali sono i colori
corrispondenti ai grigi).
• Trasformazione dei colori dell’immagine in modo che siano “avvicinati” ad un determinato
colore “focale” scelto dall’utente secondo un certo
grado α compreso tra 0 e 1 (anch’esso scelto dall’utente). Ad esempio, se l’utente sceglie il
verde allora tutti i colori dovranno essere “avvicinati” al verde, tanto più quanto maggiore è
α (in particolare: se α=0 allora i colori rimangono inalterati, se α=1 allora l’immagine
diventa tutta verde).

Trasformazione dell’immagine in un’immagine simmetrica rispetto all’asse verticale
centrale.

Squadrettatura dell’immagine in quadrati di lato (in pixel) specificato dall’utente.

SPERO NEL VOSTRO AIUTO, GRAZIE IN ANTICIPO.
Mi basterebbe sapere come si fa a creare l'immagine, per il resto mi arrangierò in qualche modo.