>> [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]