[GIOCO MUSICA] ROB BOWDEN: Ciao, mi chiamo Rob, LET'S provare questo su per le dimensioni. Così, stiamo di nuovo andando per iniziare sostanzialmente una copia del copy.c, e fare alcuni cambiamenti. Notiamo subito vediamo un cambiamento, dove invece di controllare per vedere se argc non uguale a 3, vogliamo controllare se argc non è uguale a 4, dal momento che Ora non stiamo solo prendendo in infile e outfile, ma stiamo anche prendendo in n, che è la quantità che siamo ridimensionamento dell'immagine originale. Una volta che siamo sicuri di questo, possiamo solo convertire i n un numero intero con atoi. Così, ora stiamo andando a creare qualche alias, basta chiamare argv 2 infile, e argv 3 outfile, perché argv 2 e argv 3 non sono nomi molto utile. Ora vogliamo verificare che n è all'interno dei limiti ci aspettiamo, così la spec specifica che se è minore o pari a zero, o maggiore di 100, allora questo è un fattore di ridimensionamento non valido, e dovremmo avvertire l'utente di questo. Una volta che siamo là di tutto ciò, possiamo infine aprire il nostro infile, e abbiamo bisogno di per errore di controllo per assicurarsi che il apertura non ha mancato per qualche motivo. Abbiamo anche bisogno di aprire la nostra outfile, e nuovo errore di controllo per assicurarsi che non ha mancato per qualche motivo. Ma essere sicuri se l'apertura della outfile fallito che abbiamo bisogno di chiudere il infile, che era già aperto. Quindi, supponendo che non ha mancato, poi Ne siamo - proprio come in copy.c-- andando a leggere nell'intestazione dal infile. Stiamo per assicurarsi che sia una valida bitmap, ma ora stiamo andando a fare un po ' le cose un po 'diverso. Quindi in primo luogo, stiamo andando a voler ricordare la larghezza e l'altezza originale del infile, perché stiamo andando a stia cambiando per il file di output. Così ora ricordare che per motivi strani bi.biheight, è negativo, e così l'altezza effettiva, in positivo, abbiamo vuole prendere il valore assoluto. Ora, l'imbottitura sarà lo stesso calcolo come era nel copy.c, utilizzando il vecchio larghezza, e ora siamo in realtà andando a cambiare Cosa c'è nella nostra intestazione. Quindi stiamo andando a moltiplicare la nostra larghezza per n, dal momento che stiamo scalando la larghezza n, moltiplicare l'altezza n, dal momento che siamo scala da n, e ora abbiamo il calcolo per una nuova imbottitura basato sulla nuova larghezza. Così ora abbiamo bisogno di cambiare un po ' altri campi del nostro colpo di testa. Bi.biSizeImage dovrebbe essere l' dimensioni di tutti i byte dei pixel e imbottitura dell'immagine. E quindi la dimensione di una sola fila di nostra immagine è di dimensione triplo RGB, la dimensione di un singolo pixel, il numero di volte pixel in una riga, più l'imbottitura in alla fine della riga. E poi andremo a moltiplicare per valore assoluto della nostra altezza per ottenere il numero totale di byte nei dati di immagine. bf.bfSize è solo il numero totale di byte nei nostri dati di immagine, in modo da bi.biSizeImage, più il dimensione delle nostre intestazioni. Quindi, l'aggiunta delle dimensioni del file bitmap intestazione, e le dimensioni delle informazioni di bitmap intestazione, OK. Ecco, questo è tutto quello che dobbiamo modifiche nelle nostre intestazioni. Ora scriveremo l'intestazione del file bitmap alla nostra outfile, e la nostra informazioni bitmap intestazione alla nostra outfile, e ora siamo pronti per cominciare ad andare sui pixel reali. Quindi vogliamo iterare linee di scansione del infile. Quindi vogliamo iterare oldheight. Questo è il motivo per cui abbiamo bisogno di ricordare la altezza originale, prima che noi cambiamo e scalato dal n. Ora stiamo andando a leggere un singolo riga della infile in un buffer di dimensioni oldwidth. Così qui, stiamo freading dimensione RGB tripla, un pixel, e il vecchio larghezza li dal infile nel nostro buffer. E questo sta andando essere un intero remare in questo array. Così ora, vogliamo iterare n volte a stampare questa riga al nostro outfile n volte. Ed è quello che questo ciclo sta facendo. Questo ciclo interno è scorrere il riga stessa, sulla matrice, stampa ciascun pixel nella matrice n volte. Quindi l'elemento zeroth viene stampato n volte, il primo elemento è essere stampata n volte. E questo genere di come stiamo andando a scalare orizzontalmente nel file di output, e questo ciclo, dal momento che stiamo looping n volte, è come stiamo andando a scala verticale. Quaggiù, vediamo che abbiamo bisogno di aggiungere l'imbottitura alla fine di ogni riga. Ecco perché questo è all'interno del ciclo for che è la stampa delle n righe di appena questa riga dalla infile. Poi qui, ho intenzione di saltare l'imbottitura in infile, poiché una volta abbiamo finito con una sola riga della infile, non ci preoccupiamo ciò che l'imbottitura è stato. Vogliamo solo arrivare alla seconda fila. E poi faremo ciclo indietro e fare tutto questo nuovo per la seconda fila. Infine, una volta che avremo finito con tutto ciò che, possiamo chiudere il infile, close il outfile e ritorno 0 perché abbiamo finito. Il mio nome è Rob, e questo era ridimensionamento. [GIOCO MUSICA]