1 00:00:00,000 --> 00:00:12,240 >> [Musikk spilles] 2 00:00:12,240 --> 00:00:15,870 >> ROB Bowden: Hei, jeg heter Rob, la oss prøv dette på for størrelse. 3 00:00:15,870 --> 00:00:21,100 Så er vi igjen kommer til å starte med i utgangspunktet en kopi av copy.c, og 4 00:00:21,100 --> 00:00:22,860 gjøre noen endringer. 5 00:00:22,860 --> 00:00:26,280 Merk umiddelbart ser vi en endring, der stedet for å sjekke for å se om 6 00:00:26,280 --> 00:00:30,440 argc ikke lik 3, ønsker vi å sjekke hvis argc ikke er lik 4, ettersom 7 00:00:30,440 --> 00:00:34,350 nå er vi ikke bare tar i et infile og outfile, men vi er også å ta i 8 00:00:34,350 --> 00:00:38,980 n, som er beløpet som vi er skalering det opprinnelige bildet ved. 9 00:00:38,980 --> 00:00:44,340 Når vi er sikker på det, kan vi bare konvertere n til et heltall ved hjelp atoi. 10 00:00:44,340 --> 00:00:48,760 >> Så, nå skal vi lage noen aliaser, bare ring argv to infile, og 11 00:00:48,760 --> 00:00:54,240 argv 3 outfile, fordi argv 2 og argv 3 er ikke veldig nyttige navn. 12 00:00:54,240 --> 00:00:58,510 Nå ønsker vi å sjekke at n er innenfor grensene forventer vi, så det 13 00:00:58,510 --> 00:01:02,910 spec presiserer at hvis det er mindre enn eller er lik null eller større enn 100, 14 00:01:02,910 --> 00:01:08,580 så det er en ugyldig resize faktor, og vi bør advare brukeren av den. 15 00:01:08,580 --> 00:01:13,090 >> Når vi er hinsides alt det, kan vi endelig åpne vår infile, og vi trenger 16 00:01:13,090 --> 00:01:16,270 til feil må du kontrollere at Åpningen ikke mislykkes eller annen grunn. 17 00:01:16,270 --> 00:01:19,860 Vi trenger også å åpne vår outfile, og igjen Feil sjekke for å være sikker på at 18 00:01:19,860 --> 00:01:21,250 ikke mislykkes eller annen grunn. 19 00:01:21,250 --> 00:01:26,270 Men være sikker på om åpningen av outfile mislyktes at vi må lukke 20 00:01:26,270 --> 00:01:29,040 den infile, som allerede åpnet. 21 00:01:29,040 --> 00:01:33,690 >> Så, forutsatt at ikke mislykkes, da we're - akkurat som i copy.c-- 22 00:01:33,690 --> 00:01:36,140 kommer til å lese i overskriften fra infile. 23 00:01:36,140 --> 00:01:40,130 Vi kommer til å sørge for at det er en gyldig bitmap, men nå vi kommer til å gjøre noen 24 00:01:40,130 --> 00:01:41,620 ting litt annerledes. 25 00:01:41,620 --> 00:01:44,870 Så først, vi kommer til å ønske å husker den opprinnelige bredde og høyde 26 00:01:44,870 --> 00:01:48,290 av infile, fordi vi kommer til å være i endring det for outfile. 27 00:01:48,290 --> 00:01:53,890 Så nå må du huske at for merkelige grunner bi.biheight, er negativ, og 28 00:01:53,890 --> 00:01:58,670 så selve høyden, i positiv, vi ønsker å ta den absolutte verdien. 29 00:01:58,670 --> 00:02:02,580 >> Nå blir polstringen kommer til å være den samme beregning som det var i copy.c, 30 00:02:02,580 --> 00:02:06,060 bruker den gamle bredden, og nå er vi faktisk kommer til å endre 31 00:02:06,060 --> 00:02:07,320 hva er i vår header. 32 00:02:07,320 --> 00:02:11,200 Så vi kommer til å mangedoble vår bredde av n, siden vi skalere bredden av 33 00:02:11,200 --> 00:02:15,100 n, multiplisere høyden med n, siden vi er skalering av n, og nå har vi 34 00:02:15,100 --> 00:02:19,250 beregningen for en ny padding basert på den nye bredde. 35 00:02:19,250 --> 00:02:21,840 >> Så nå må vi endre noen andre felt i vår header. 36 00:02:21,840 --> 00:02:26,890 Bi.biSizeImage er ment å være den størrelsen på alle bytene i piksler 37 00:02:26,890 --> 00:02:28,520 og padding av bildet. 38 00:02:28,520 --> 00:02:34,190 Og slik at størrelsen av en enkelt rad av vår bilde er størrelsen på RGB trippel, størrelsen 39 00:02:34,190 --> 00:02:39,430 av en enkelt piksel, ganger antall piksler på rad, pluss padding på 40 00:02:39,430 --> 00:02:40,910 enden av raden. 41 00:02:40,910 --> 00:02:45,200 Og så kommer vi til å multiplisere at ved absoluttverdien av våre høyde for å komme 42 00:02:45,200 --> 00:02:48,350 det totale antall byte i bildedataene. 43 00:02:48,350 --> 00:02:53,050 bf.bfSize er bare det totale antall byte i våre bildedata, så 44 00:02:53,050 --> 00:02:56,530 bi.biSizeImage, pluss Størrelsen på våre overskrifter. 45 00:02:56,530 --> 00:02:59,850 Så, legge på størrelsen på bitmap fil header, og størrelsen på bitmap-info 46 00:02:59,850 --> 00:03:00,800 header, OK. 47 00:03:00,800 --> 00:03:03,170 Så det er alt vi trenger for å endre i våre overskrifter. 48 00:03:03,170 --> 00:03:07,020 Nå skal vi skrive bitmap fil header til vår outfile, og vår bitmap info 49 00:03:07,020 --> 00:03:09,880 header til vår outfile, og nå vi er klar til å begynne å gå 50 00:03:09,880 --> 00:03:11,990 over den faktiske piksler. 51 00:03:11,990 --> 00:03:15,720 >> Så vi ønsker å iterere over den INFILE sin skannelinjer. 52 00:03:15,720 --> 00:03:17,730 Så vi ønsker å iterere over oldheight. 53 00:03:17,730 --> 00:03:20,830 Dette er grunnen til at vi trengte å huske opprinnelige høyde, før vi endrer det 54 00:03:20,830 --> 00:03:23,040 og skalert det ved n. 55 00:03:23,040 --> 00:03:27,810 Nå skal vi lese en enkelt rad på infile inn i en 56 00:03:27,810 --> 00:03:30,630 buffer størrelse oldwidth. 57 00:03:30,630 --> 00:03:36,190 Så her er vi freading størrelse med RGB trippel, én piksel, og gamle bredden av 58 00:03:36,190 --> 00:03:39,760 dem fra infile i vår buffer. 59 00:03:39,760 --> 00:03:43,480 Og det kommer til å bli en hel rad i denne tabellen. 60 00:03:43,480 --> 00:03:50,390 Så nå ønsker vi å reagere n ganger til skrive ut denne raden til vår outfile n ganger. 61 00:03:50,390 --> 00:03:52,510 Og så det er hva denne sløyfen gjør. 62 00:03:52,510 --> 00:03:57,910 Denne indre løkken itera over ror seg selv, over rekken, trykking 63 00:03:57,910 --> 00:04:00,710 hver piksel i matrisen n ganger. 64 00:04:00,710 --> 00:04:04,510 Så zeroth element blir skrevet ut n ganger, er det første elementet er 65 00:04:04,510 --> 00:04:05,660 trykt n ganger. 66 00:04:05,660 --> 00:04:10,820 Og det er liksom hvordan vi skal horisontalt skalere i outfile, og 67 00:04:10,820 --> 00:04:13,390 denne sløyfen, siden vi looping n ganger, er hvordan vi skal 68 00:04:13,390 --> 00:04:15,580 vertikalt skala. 69 00:04:15,580 --> 00:04:19,850 >> Ned her, ser vi at vi må legge til polstringen ved slutten av hver linje. 70 00:04:19,850 --> 00:04:25,050 Det er derfor dette er inne i for loop det er å skrive ut de n rader med bare 71 00:04:25,050 --> 00:04:28,400 dette en rad fra infile. 72 00:04:28,400 --> 00:04:32,150 Deretter ned her, kommer jeg til å hoppe over utfyllingen i infile, siden en gang 73 00:04:32,150 --> 00:04:34,560 vi er ferdig med en rad av infile, bryr vi oss ikke om 74 00:04:34,560 --> 00:04:35,290 hva padding var. 75 00:04:35,290 --> 00:04:37,110 Vi ønsker bare å få til den andre raden. 76 00:04:37,110 --> 00:04:40,870 Og så får vi sløyfe tilbake og gjøre alt dette igjen for den andre raden. 77 00:04:40,870 --> 00:04:44,406 >> Til slutt, når vi er ferdig med alt det, vi kan lukke infile, tett 78 00:04:44,406 --> 00:04:47,430 den outfile, og retur 0 fordi vi er ferdige. 79 00:04:47,430 --> 00:04:50,330 >> Mitt navn er Rob, og dette var resize. 80 00:04:50,330 --> 00:04:54,934 >> [Musikk spilles]