1 00:00:00,000 --> 00:00:00,996 2 00:00:00,996 --> 00:00:12,470 >> [GIOCO MUSICA] 3 00:00:12,470 --> 00:00:13,210 >> ROB BOWDEN: Ciao. 4 00:00:13,210 --> 00:00:16,870 Sono Rob e cerchiamo di dimensioni su questo problema. 5 00:00:16,870 --> 00:00:20,990 Quindi stiamo per iniziare con copy.c come un modello, ma stiamo andando a essere 6 00:00:20,990 --> 00:00:23,340 fare alcuni cambiamenti. 7 00:00:23,340 --> 00:00:27,570 >> Ora vediamo che stiamo facendo subito una cambiare dove stiamo più controllo 8 00:00:27,570 --> 00:00:31,560 per il nostro RXC non è uguale a 3, ma ora stiamo controllando rc non è uguale a 4. 9 00:00:31,560 --> 00:00:34,670 Poiché vogliamo anche includere, in Oltre ai file di in e out file 10 00:00:34,670 --> 00:00:39,550 argomenti, f che sta per essere questo fattore per il quale stiamo scala. 11 00:00:39,550 --> 00:00:45,430 >> Così una volta siamo sicuri di questo, vogliamo usare s scan f per convertire la stringa 12 00:00:45,430 --> 00:00:49,030 argv1 ad un galleggiante. 13 00:00:49,030 --> 00:00:51,330 E noi andremo a memorizzare che in fattore. 14 00:00:51,330 --> 00:00:55,180 Questo carattere aggiuntivo è fare in modo che non stiamo realmente entrando 15 00:00:55,180 --> 00:00:59,200 qualcosa come 1.4 ABC nella riga di comando. 16 00:00:59,200 --> 00:01:02,960 >> Ora stiamo andando a creare alcuni alias poiché RV2 e RV3 non sono 17 00:01:02,960 --> 00:01:04,310 molto utile nomi. 18 00:01:04,310 --> 00:01:07,660 Siamo, invece, di andare a chiamare li in un file e fuori file. 19 00:01:07,660 --> 00:01:11,580 Ora stiamo andando a fare in modo che il nostro fattore era in realtà valida. 20 00:01:11,580 --> 00:01:16,330 Quindi, se il fattore è inferiore o uguale a zero o maggiore di 100, come da 21 00:01:16,330 --> 00:01:19,660 le specifiche, dovrebbe respingere tale fattore. 22 00:01:19,660 --> 00:01:23,890 >> Quando siamo sicuri che è buono, ora possiamo aprire il file n, e dobbiamo fare 23 00:01:23,890 --> 00:01:25,950 certo che è stato aperto con successo. 24 00:01:25,950 --> 00:01:28,630 Se non lo ha fatto, che restituirà null. 25 00:01:28,630 --> 00:01:30,390 Stiamo per aprire il file fuori. 26 00:01:30,390 --> 00:01:33,420 E ancora, vogliamo controllare per assicurarsi che sia aperto con successo. 27 00:01:33,420 --> 00:01:37,270 E se non si è aperta con successo, allora abbiamo anche bisogno di essere sicuri di chiudere 28 00:01:37,270 --> 00:01:40,870 il file n originariamente successo aperto, oppure abbiamo un 29 00:01:40,870 --> 00:01:42,600 perdita di memoria. 30 00:01:42,600 --> 00:01:46,350 >> Così ora stiamo andando a leggere in bitmap intestazione del file e le informazioni bitmap 31 00:01:46,350 --> 00:01:48,890 intestazione dal file n. 32 00:01:48,890 --> 00:01:52,360 Stiamo andando a fare in modo che il il file n era un bitmap valido. 33 00:01:52,360 --> 00:01:52,640 OK. 34 00:01:52,640 --> 00:01:55,100 >> Così ora stiamo per iniziare a fare alcuni cambiamenti. 35 00:01:55,100 --> 00:01:58,840 Quindi perché stiamo andando a cambiare cose, in primo luogo vogliono ricordare il 36 00:01:58,840 --> 00:02:01,510 vecchio larghezza del file n. 37 00:02:01,510 --> 00:02:05,160 Vogliamo ricordare il vecchio imbottitura il file n utilizzando lo stesso calcolo 38 00:02:05,160 --> 00:02:06,990 da copy.c. 39 00:02:06,990 --> 00:02:09,840 >> E ora stiamo andando a cambiare le informazioni di intestazione bitmap. 40 00:02:09,840 --> 00:02:13,630 E così stiamo moltiplicando sia la larghezza e l'altezza dal fattore 41 00:02:13,630 --> 00:02:15,750 che è quello che stiamo scala da. 42 00:02:15,750 --> 00:02:18,420 Stiamo andando a determinare il nuova imbottitura del file 43 00:02:18,420 --> 00:02:21,140 utilizzando la nuova larghezza. 44 00:02:21,140 --> 00:02:27,330 E stiamo andando a determinare il nuovo dimensioni dell'immagine utilizzando il numero di 45 00:02:27,330 --> 00:02:31,610 byte in una singola riga che sta per il numero di pixel in quella riga 46 00:02:31,610 --> 00:02:35,960 volte la dimensione di un pixel più l' numero di byte di riempimento alla fine 47 00:02:35,960 --> 00:02:40,310 di tale riga, e moltiplicando tutto ciò per il numero di righe che abbiamo. 48 00:02:40,310 --> 00:02:43,800 Ecco, questo è il numero di byte abbiamo nei nostri dati di immagine. 49 00:02:43,800 --> 00:02:48,190 >> Bf.Bfsize ora sta per essere il numero di byte nel nostro beta immagine più 50 00:02:48,190 --> 00:02:49,350 la dimensione dei nostri intestazioni. 51 00:02:49,350 --> 00:02:53,910 Quindi, più il formato del file di intestazione bitmap e le dimensioni del bitmap informazioni di intestazione. 52 00:02:53,910 --> 00:02:54,510 OK. 53 00:02:54,510 --> 00:02:56,440 Ecco, questo è per i nostri intestazioni. 54 00:02:56,440 --> 00:02:59,030 Possiamo scrivere la testa di file e Info intestazione al nostro out 55 00:02:59,030 --> 00:03:01,590 File e siamo a posto. 56 00:03:01,590 --> 00:03:03,800 >> Ora è il momento di iniziare effettivamente scrivere il pixel 57 00:03:03,800 --> 00:03:05,120 dati al file fuori. 58 00:03:05,120 --> 00:03:10,460 Stiamo andando a dichiarare un buffer di dimensioni vecchio larghezza RGB triplica, e siamo 59 00:03:10,460 --> 00:03:13,790 andando a dichiarare una variabile chiamata intorpidito fila, che è andremo a 60 00:03:13,790 --> 00:03:15,640 inizialmente fissata pari a negativo 1. 61 00:03:15,640 --> 00:03:19,090 Vedremo che stiamo andando a utilizzare che, per tenere traccia di quello 62 00:03:19,090 --> 00:03:22,640 fila attualmente abbiamo caricato in questo buffer. 63 00:03:22,640 --> 00:03:23,290 OK. 64 00:03:23,290 --> 00:03:28,750 >> Così ora a differenza della versione standard, invece di iterare su al di 65 00:03:28,750 --> 00:03:32,900 di file, stiamo andando a iterare ogni riga del file fuori e capire 66 00:03:32,900 --> 00:03:38,130 che riga del file in vogliamo collocare in questa riga nel file fuori. 67 00:03:38,130 --> 00:03:44,930 Così l'iterazione di tutte le righe in out il file utilizzando la nuova altezza, siamo i primi 68 00:03:44,930 --> 00:03:48,890 andando a determinare la riga nella vecchia file che andremo a utilizzare, che siamo 69 00:03:48,890 --> 00:03:53,560 intenzione di fare prendendo questa corrente fila diviso per il fattore. 70 00:03:53,560 --> 00:03:58,000 Così che sta per darci la riga nel vecchio file che vogliamo. 71 00:03:58,000 --> 00:04:03,310 >> Così ora se fila insensibile non è uguale vecchia y, stiamo andando ad avere per leggere la riga 72 00:04:03,310 --> 00:04:05,940 che vogliamo nel nostro buffer di riga corrente. 73 00:04:05,940 --> 00:04:07,700 Quindi, come facciamo a fare questo? 74 00:04:07,700 --> 00:04:11,650 In primo luogo, stiamo andando a capire il posizione che comincia quella riga nella 75 00:04:11,650 --> 00:04:13,100 file originale. 76 00:04:13,100 --> 00:04:18,630 Cosicché la posizione sarà passato, tutti i nostri intestazioni e 77 00:04:18,630 --> 00:04:21,589 ora passato vecchi filari y. 78 00:04:21,589 --> 00:04:23,880 >> E così il numero di byte sono in una singola riga? 79 00:04:23,880 --> 00:04:28,740 Ancora una volta, la dimensione di RGB tempi triple vecchio larghezza più vecchio imbottitura, in modo che l' 80 00:04:28,740 --> 00:04:30,640 numero di byte in una singola riga. 81 00:04:30,640 --> 00:04:33,680 E vogliamo ignorare passato vecchi righe y. 82 00:04:33,680 --> 00:04:37,580 Quindi stiamo andando a cercare f e siamo utilizzando cercare insieme a partire dalla 83 00:04:37,580 --> 00:04:39,100 inizio di un file. 84 00:04:39,100 --> 00:04:42,740 Stiamo andando a cercare f a questa posizione nel file, che ci mette al 85 00:04:42,740 --> 00:04:46,500 all'inizio della riga vogliamo leggere nella nostra buffer. 86 00:04:46,500 --> 00:04:48,510 >> Stiamo andando a impostare fila insensibile pari a vecchia y. 87 00:04:48,510 --> 00:04:53,080 Così ora se ci loop back e vogliamo utilizzare questa stessa riga nel nostro file fuori, 88 00:04:53,080 --> 00:04:55,970 allora non stiamo andando a leggere nel nuovo inutilmente. 89 00:04:55,970 --> 00:04:59,310 Quindi, in realtà, fila è intorpidito solo una ottimizzazione. 90 00:04:59,310 --> 00:05:05,500 >> Infine, stiamo andando a leggere in riga corrente il vecchio larghezza RGB triplica 91 00:05:05,500 --> 00:05:08,040 che vogliamo dal file originale. 92 00:05:08,040 --> 00:05:12,270 Così ora cur riga contiene i pixel da il file originale che vogliamo 93 00:05:12,270 --> 00:05:14,200 scrivere nel file fuori. 94 00:05:14,200 --> 00:05:18,960 Così ora, proprio come sopra, invece di iterare su il vecchio file, abbiamo bisogno di 95 00:05:18,960 --> 00:05:22,560 per iterare attraverso i nuovi file righe. 96 00:05:22,560 --> 00:05:27,450 Bene, qui, invece di iterare su tutti dei vecchi pixel nella riga corrente, 97 00:05:27,450 --> 00:05:31,210 vogliamo per scorrere tutte le pixel nel nostro nuovo file in questo 98 00:05:31,210 --> 00:05:32,480 particolare riga. 99 00:05:32,480 --> 00:05:34,140 >> Perché vogliamo farlo? 100 00:05:34,140 --> 00:05:38,960 Perché vediamo qui che non siamo effettivamente necessariamente utilizzando tutto lo 101 00:05:38,960 --> 00:05:41,020 pixel nel file originale. 102 00:05:41,020 --> 00:05:46,630 Perché se stiamo contrazione, potremmo in realtà vuole ignorare i pixel. 103 00:05:46,630 --> 00:05:48,090 E vediamo che questo - 104 00:05:48,090 --> 00:05:49,690 x diviso per il fattore - 105 00:05:49,690 --> 00:05:55,620 specchi strettamente quassù dove diciamo y diviso per il fattore di capire che 106 00:05:55,620 --> 00:06:02,480 la vecchia riga y-esima corrisponde la riga y-esimo in questo nuovo file. 107 00:06:02,480 --> 00:06:05,880 >> Ora andremo a scrivere tutti questi pixel dal vecchio fila 108 00:06:05,880 --> 00:06:07,440 nella nostra nuova riga. 109 00:06:07,440 --> 00:06:10,890 Una volta che abbiamo fatto, dobbiamo solo mettere l'imbottitura alla fine della nostra fila 110 00:06:10,890 --> 00:06:15,540 e faremo ciclo indietro e proseguire per tutte le righe del nostro nuovo file. 111 00:06:15,540 --> 00:06:19,390 Alla fine, abbiamo bisogno di chiudere il nostro vecchio file, chiudere il nostro nuovo file, e ritorno 112 00:06:19,390 --> 00:06:21,540 zero perché tutto è andato bene. 113 00:06:21,540 --> 00:06:24,220 >> Il mio nome è Rob e questo era Recess. 114 00:06:24,220 --> 00:06:29,184 >> [GIOCO MUSICA]