Fondamenti di Informatica: esercitazione di laboratorio Programmi in linguaggio C per manipolare file bitmap e audio
Pier Luca Montessoro
1. Creazione di un file bitmap: barre di colore
I test dei sistemi televisivi comprendono uno schermo a “barre di colore”. Si tratta di una serie di strisce verticali in cui compaiono le sette combinazioni di colori ottenibili utilizzando, alla massima intensità, uno oppure una coppia di colori primari.
Si scriva un programma in linguaggio C che legga dalla linea di comando le dimensioni, in pixel, dell’immagine da generare, e crei il file “barre.bmp” contenente 8 strisce verticali nei colori rappresentati a lato.
Suggerimento:
Per scegliere il colore in funzione della colonna si può utilizzare un vettore costante di strutture COLORTRIPLE
2. Creazione di un file bitmap:
circonferenza
Si scriva un programma in linguaggio C che legga dalla linea di comando la dimensione N, in pixel, di una bitmap quadrata (NxN) e crei un file contenente una circonferenza rossa su fondo azzurro inscritta in tale quadrato.
Suggerimenti:
- Vanno colorati i punti la cui distanza dal centro è compresa tra il raggio interno e il raggio esterno della corona circolare la cui ampiezza è lo spessore della circonferenza che si vuole disegnare
- Si adatti lo spessore della circonferenza alla dimensione dell’immagine in modo che sia chiaramente visibile
3. Creazione di un file bitmap: scacchiera
Facendo uso delle librerie disponibili sul sito www.montessoro.it (sezione esercizi relativi alla codifica delle immagini del corso Fondamenti di Informatica 2), si scriva un programma che:
• accetti sulla linea di comando due parametri: il nome di un file (senza estensione) e un intero N che rappresenta una dimensione in pixel
• crei un file il cui nome sia quello ricevuto sulla riga di comando, l’estensione sia .BMP, e il contenuto sia l’immagine bitmap di una scacchiera quadrata NxN con 8 caselle bianche e nere per lato.
Suggerimenti:
- Creare una bitmap in memoria (CreateEmptyBitmap) - Colorarla (due cicli for annidati, una variabile che
tenga conto del colore corrente, un test sulle coordinate per cambiare il colore facendo uso dell’operatore %)
- Aprire un file in scrittura in modo “wb”
- Salvare la bitmap sul file (WriteBitmap)
4. Filtraggio di un file bitmap
Per rendere più “morbida” un’immagine è possibile applicare dei filtri. Per esempio è possibile sostituire al valore di un pixel la media pesata del suo valore e di quello dei pixel circostanti.
Si scriva un programma in linguaggio C che legga dalla linea di comando il nome di due file .BMP, legga il primo e scriva nel secondo l’immagine filtrata secondo questo algoritmo. Si sperimentino diverse versioni del programma modificando il peso dei vari pixel (questo può anche essere un parametro passato al programma sulla linea di comando) e allargando l’intorno da cui prelevare i valori per effettuare la media pesata.
Esempio (peso del pixel = 0.6, peso dell’intorno = 0.4):
nuovo valore (i,j) =
vecchio valore (i,j) * 0.6 + (vecchio valore (i-1, j)/4.0 + vecchio valore (i+1, j)/4.0 + vecchio valore (i, j-1)/4.0 + vecchio valore (i, j+1)/4.0) * 0.4
5. Creazione di una triade maggiore
Una triade maggiore (accordo maggiore) in musica è la sovrapposizione di tre note separate, rispetto alla nota di riferimento (tonica) di un intervallo di terza maggiore e un intervallo di quinta giusta.
Noto che la frequenza di riferimento internazionale per l’accordatura degli strumenti, 440 Hz, corrisponde ad un LA (e quindi anche la nota a 220 Hz – un’ottava sotto – è un LA), e che gli intervalli di terza maggiore e di quinta giusta corrispondono ai seguenti rapporti di frequenze:
4983 . 1 2 : 1 259921 . 1 2 :
1
412≈
712≈
terza maggiore quinta giusta
si scriva un programma che generi un file audio
“lamaggiore.wav” della durata di 3 secondi contenente un accordo di LA maggiore con tonica a 220 Hz.
6. Delay
Un noto effetto in musica è il delay. Si tratta di ripetere, ad un volume minore, il suono con un ritardo di alcune decine o centinaia di millisecondi, in aggiunta al suono originale.
Si scriva un programma che riceva come parametro dalla linea di comando il nome di due file .WAV, legga il primo e crei, nel secondo, il suono originale con l’aggiunta di un ritardo. Il valore del ritardo e la quantità di riduzione del volume siano letti da tastiera.
Attenzione a non cercare di scrivere più campioni di quanti memorizzabili nella struttura allocata in memoria...
7. Reverse
Scrivere un programma che inverte un file .WAV (cioè fa ascoltare il brano al contrario). È sufficiente invertire l’ordine dei campioni con un algoritmo simile a quello utilizzato a Fondamenti di Informatica I per la funzione reverse sulle stringhe.
NOTA:
SUL SITO WWW.MONTESSORO.IT SONO DISPONIBILI ALCUNI ESEMPI DI FILE BITMAP E AUDIO UTILI PER PROVARE I VOSTRI PROGRAMMI