1 00:00:00,000 --> 00:00:12,240 >> [Glazba svira] 2 00:00:12,240 --> 00:00:15,870 >> ROB Bowden: Bok, ja sam Rob, hajdemo probati ovaj na za veličinu. 3 00:00:15,870 --> 00:00:21,100 Dakle, opet će početi s osnovi kopija copy.c, a 4 00:00:21,100 --> 00:00:22,860 napraviti nekoliko promjena. 5 00:00:22,860 --> 00:00:26,280 Napomena odmah vidimo promjenu, gdje umjesto da provjere da li 6 00:00:26,280 --> 00:00:30,440 argc ne jednaka 3, želimo provjeriti ako argc nije jednako 4, budući 7 00:00:30,440 --> 00:00:34,350 Sada mi ne samo uzimati u infile i outfile, ali mi smo također uzimajući u 8 00:00:34,350 --> 00:00:38,980 nje, što je iznos koji smo skaliranje izvornu sliku. 9 00:00:38,980 --> 00:00:44,340 Nakon što smo sigurni u to, možemo samo pretvoriti u cijeli broj n pomoću atoi. 10 00:00:44,340 --> 00:00:48,760 >> Dakle, sad ćemo stvoriti neke nadimci, samo zovi argv 2 infile, a 11 00:00:48,760 --> 00:00:54,240 argv 3 outfile, jer argv 2 i argv 3 nisu jako korisne imena. 12 00:00:54,240 --> 00:00:58,510 Sada želimo provjeriti kako bi bili sigurni n u granicama onoga što očekujemo, pa 13 00:00:58,510 --> 00:01:02,910 spec. određuje da ako je manje ili jednak nuli, ili veći od 100, 14 00:01:02,910 --> 00:01:08,580 onda je to valjan faktor promjena veličine, i mi trebali upozoriti korisnika o tome. 15 00:01:08,580 --> 00:01:13,090 >> Jednom smo iznad svega što možemo konačno otvoriti našu INFILE, i moramo 16 00:01:13,090 --> 00:01:16,270 pogreškama provjeriti kako bi bili sigurni da Otvaranje nije propustio iz nekog razloga. 17 00:01:16,270 --> 00:01:19,860 Također moramo otvoriti naše outfile, a opet greška provjeriti kako bi bili sigurni da je 18 00:01:19,860 --> 00:01:21,250 ne uspiju iz nekog razloga. 19 00:01:21,250 --> 00:01:26,270 No, budite sigurni, ako otvaranje outfile uspjeli da trebamo zatvoriti 20 00:01:26,270 --> 00:01:29,040 infile, koji je već bio otvoren. 21 00:01:29,040 --> 00:01:33,690 >> Dakle, pod pretpostavkom da nije propustio, a zatim we're - baš kao u copy.c-- 22 00:01:33,690 --> 00:01:36,140 će se pročitati u zaglavlju iz infile. 23 00:01:36,140 --> 00:01:40,130 Idemo kako bi bili sigurni da je valjana bitmap, ali sada ćemo napraviti neke 24 00:01:40,130 --> 00:01:41,620 stvari malo drugačije. 25 00:01:41,620 --> 00:01:44,870 Dakle, prvo, idemo se žele zapamtite izvornu širinu i visinu 26 00:01:44,870 --> 00:01:48,290 od infile, jer ćemo treba ga mijenja za outfile. 27 00:01:48,290 --> 00:01:53,890 Dakle, sada se sjetiti da je za neobičnog razloga bi.biheight, negativna, a 28 00:01:53,890 --> 00:01:58,670 tako stvarna visina, u pozitivnom, mi žele uzeti apsolutnu vrijednost. 29 00:01:58,670 --> 00:02:02,580 >> Sada, padding će biti isti Izračun kao što je bio u copy.c, 30 00:02:02,580 --> 00:02:06,060 koristeći staru širinu, a sada smo zapravo neće promijeniti 31 00:02:06,060 --> 00:02:07,320 ono što je u našoj napadača. 32 00:02:07,320 --> 00:02:11,200 Tako ćemo umnožiti naše širinu n, jer smo skaliranje širinu 33 00:02:11,200 --> 00:02:15,100 n, pomnožite visinu n, budući da smo skaliranje po n, a sada imamo 34 00:02:15,100 --> 00:02:19,250 Izračun za novi padding temelji se na novoj širini. 35 00:02:19,250 --> 00:02:21,840 >> Dakle, mi se sada morati promijeniti neke drugim poljima u našoj napadača. 36 00:02:21,840 --> 00:02:26,890 Bi.biSizeImage je trebao biti veličina svih bajtova u pikselima 37 00:02:26,890 --> 00:02:28,520 i padding slike. 38 00:02:28,520 --> 00:02:34,190 I tako je veličina jednog reda od naših slika je veličina RGB triple, veličina 39 00:02:34,190 --> 00:02:39,430 od jednog piksela, puta broj piksela u nizu, plus padding na 40 00:02:39,430 --> 00:02:40,910 kraj reda. 41 00:02:40,910 --> 00:02:45,200 A onda ćemo pomnožite to apsolutna vrijednost naše visine dobili 42 00:02:45,200 --> 00:02:48,350 ukupan broj bajtova u slikovnih podataka. 43 00:02:48,350 --> 00:02:53,050 bf.bfSize je samo ukupan broj bajtova u našim slikovnih podataka, tako da 44 00:02:53,050 --> 00:02:56,530 bi.biSizeImage, plus veličina našeg zaglavlja. 45 00:02:56,530 --> 00:02:59,850 Dakle, dodajući na veličinu bitmap datoteku header, a veličina bitmap informacija 46 00:02:59,850 --> 00:03:00,800 header, OK. 47 00:03:00,800 --> 00:03:03,170 Dakle, to je sve što nam je potrebno da se promijeniti u našim zaglavlja. 48 00:03:03,170 --> 00:03:07,020 Sada ćemo napisati zaglavlje bitmap datoteku našem outfile, i naše bitmap informacija 49 00:03:07,020 --> 00:03:09,880 header našem outfile, a sada smo spremni za početak ide 50 00:03:09,880 --> 00:03:11,990 iznad samih piksela. 51 00:03:11,990 --> 00:03:15,720 >> Na taj način želimo ponoviti više u infile je linija skeniranja. 52 00:03:15,720 --> 00:03:17,730 Na taj način želimo ponoviti tijekom oldheight. 53 00:03:17,730 --> 00:03:20,830 To je razlog zašto nam treba zapamtiti izvorna visina, prije nego što smo ga mijenjati 54 00:03:20,830 --> 00:03:23,040 i to umanjiti n. 55 00:03:23,040 --> 00:03:27,810 Sada ćemo čitati jednu redak infile u 56 00:03:27,810 --> 00:03:30,630 buffer veličine oldwidth. 57 00:03:30,630 --> 00:03:36,190 Pa evo, mi smo freading veličina RGB triple, jedan piksel, a stara širina 58 00:03:36,190 --> 00:03:39,760 ih iz infile u našoj tampon. 59 00:03:39,760 --> 00:03:43,480 I to će biti cijela red u ovom polju. 60 00:03:43,480 --> 00:03:50,390 Tako sada, želimo ponoviti n puta za ispisati ovaj redak našem outfile n puta. 61 00:03:50,390 --> 00:03:52,510 I to je ono što ova petlja se radi. 62 00:03:52,510 --> 00:03:57,910 Ova unutarnja petlja se iterating više se red, preko polja, tiskanje 63 00:03:57,910 --> 00:04:00,710 svaki piksel u nizu n puta. 64 00:04:00,710 --> 00:04:04,510 Dakle nultoga element se ispisuje n puta, prvi element se bude 65 00:04:04,510 --> 00:04:05,660 tiskani n puta. 66 00:04:05,660 --> 00:04:10,820 I to je vrsta kako ćemo vodoravno razmjera u outfile, a 67 00:04:10,820 --> 00:04:13,390 ova petlja, jer smo petlje n puta, kako ćemo 68 00:04:13,390 --> 00:04:15,580 vertikalno mjerilo. 69 00:04:15,580 --> 00:04:19,850 >> Ovdje dolje, vidimo da nam je potrebno dodati padding na kraju svakog reda. 70 00:04:19,850 --> 00:04:25,050 To je razlog zašto je to unutar for petlje koji je ispisivao n redaka samo 71 00:04:25,050 --> 00:04:28,400 ovo je jedan red od infile. 72 00:04:28,400 --> 00:04:32,150 Onda ovdje, ja ću preskočiti padding u infile, jer jednom 73 00:04:32,150 --> 00:04:34,560 gotovi smo s jednim redom infile, mi ne stalo 74 00:04:34,560 --> 00:04:35,290 ono padding je. 75 00:04:35,290 --> 00:04:37,110 Mi samo želimo da se na drugom redu. 76 00:04:37,110 --> 00:04:40,870 I onda ćemo petlje natrag i učiniti sve to opet za drugi red. 77 00:04:40,870 --> 00:04:44,406 >> Konačno, nakon što smo završili sa svime što, možemo zatvoriti INFILE, u neposrednoj blizini 78 00:04:44,406 --> 00:04:47,430 outfile i povratak 0, jer smo gotovi. 79 00:04:47,430 --> 00:04:50,330 >> Moje ime je Rob, a to je promjena veličine. 80 00:04:50,330 --> 00:04:54,934 >> [Glazba svira]