1 00:00:00,000 --> 00:00:12,240 >> [Musikgengivelse] 2 00:00:12,240 --> 00:00:15,870 >> ROB BOWDEN: Hej, jeg er Rob, lad os prøv denne på for størrelse. 3 00:00:15,870 --> 00:00:21,100 Så vi igen kommer til at starte med dybest set en kopi af copy.c, og 4 00:00:21,100 --> 00:00:22,860 foretage nogle få ændringer. 5 00:00:22,860 --> 00:00:26,280 Bemærk straks ser vi en forandring, hvor i stedet for at kontrollere, om 6 00:00:26,280 --> 00:00:30,440 argc ikke lige 3, vi ønsker at kontrollere hvis argc ikke lig 4, eftersom 7 00:00:30,440 --> 00:00:34,350 nu er vi ikke bare tage i en infile og outfile, men vi også tage i 8 00:00:34,350 --> 00:00:38,980 n, hvilket er det beløb, som vi skalering originalbilledet. 9 00:00:38,980 --> 00:00:44,340 Når vi er sikker på, at vi bare kan konvertere n til et heltal ved hjælp atoi. 10 00:00:44,340 --> 00:00:48,760 >> Så nu vil vi skabe nogle aliaser, bare kalde argv 2 infile, og 11 00:00:48,760 --> 00:00:54,240 argv 3 outfile, fordi argv 2 og argv 3 er ikke meget nyttige navne. 12 00:00:54,240 --> 00:00:58,510 Nu ønsker vi at tjekke for at sikre n er inden for grænserne, vi forventer, så 13 00:00:58,510 --> 00:01:02,910 spec specificerer at hvis det er mindre end eller lig med nul, eller større end 100, 14 00:01:02,910 --> 00:01:08,580 så er et ugyldigt resize faktor, og vi bør advare brugeren af ​​det. 15 00:01:08,580 --> 00:01:13,090 >> Når vi er ud over alt det, vi kan endelig åbner vores infile, og vi har brug for 16 00:01:13,090 --> 00:01:16,270 til fejl tjekke for at sikre, at den åbning ikke svigte eller anden grund. 17 00:01:16,270 --> 00:01:19,860 Vi er også nødt til at åbne vores outfile, og igen fejl skal du kontrollere, at 18 00:01:19,860 --> 00:01:21,250 svigtede ikke en eller anden grund. 19 00:01:21,250 --> 00:01:26,270 Men vær sikker på, om åbningen af ​​den outfile mislykkedes at vi er nødt til at lukke 20 00:01:26,270 --> 00:01:29,040 den infile, som allerede blev åbnet. 21 00:01:29,040 --> 00:01:33,690 >> Så under forudsætning af, der ikke svigter, så vi er klar - ligesom i copy.c-- 22 00:01:33,690 --> 00:01:36,140 kommer til at læse i overskriften fra infile. 23 00:01:36,140 --> 00:01:40,130 Vi kommer til at sørge for det er et gyldigt bitmap, men nu vil vi gøre nogle 24 00:01:40,130 --> 00:01:41,620 tingene lidt anderledes. 25 00:01:41,620 --> 00:01:44,870 Så det første, vi kommer til at ønsker at huske den oprindelige bredde og højde 26 00:01:44,870 --> 00:01:48,290 af infile, fordi vi kommer til at være at ændre det for outfile. 27 00:01:48,290 --> 00:01:53,890 Så nu huske, at for mærkelige grunde bi.biheight, er negativ, og 28 00:01:53,890 --> 00:01:58,670 så den faktiske højde, positiv, vi ønsker at tage den absolutte værdi. 29 00:01:58,670 --> 00:02:02,580 >> Nu er polstring vil være den samme beregning, som det var i copy.c, 30 00:02:02,580 --> 00:02:06,060 ved hjælp af den gamle bredde, og nu er vi faktisk kommer til at ændre 31 00:02:06,060 --> 00:02:07,320 Hvad er der i vores header. 32 00:02:07,320 --> 00:02:11,200 Så vi kommer til at formere vores bredde af n, da vi skalere bredden med 33 00:02:11,200 --> 00:02:15,100 n, multipliceres højden med n, da vi er skalering af n, og nu har vi 34 00:02:15,100 --> 00:02:19,250 beregningen for en ny polstring baseret på den nye bredde. 35 00:02:19,250 --> 00:02:21,840 >> Så nu er vi nødt til at ændre nogle andre felter i vores hovedstød. 36 00:02:21,840 --> 00:02:26,890 Bi.biSizeImage formodes at være den størrelsen på alle bytes i pixels 37 00:02:26,890 --> 00:02:28,520 og polstring af billedet. 38 00:02:28,520 --> 00:02:34,190 Og så størrelsen af ​​en enkelt række af vores Billedet størrelse RGB tredobbelt, størrelse 39 00:02:34,190 --> 00:02:39,430 en enkelt pixel, gange antallet af pixels i træk, plus polstring på 40 00:02:39,430 --> 00:02:40,910 enden af ​​rækken. 41 00:02:40,910 --> 00:02:45,200 Og så vil vi formere sig, at ved absolutte værdi af vores højde for at få 42 00:02:45,200 --> 00:02:48,350 det samlede antal bytes i billeddata. 43 00:02:48,350 --> 00:02:53,050 bf.bfSize er bare det samlede antal bytes i vores billeddata, så 44 00:02:53,050 --> 00:02:56,530 bi.biSizeImage, plus størrelsen af ​​vores overskrifter. 45 00:02:56,530 --> 00:02:59,850 Så tilsætning af størrelsen på bitmap-fil header, og størrelsen af ​​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 behøver at ændre i vores overskrifter. 48 00:03:03,170 --> 00:03:07,020 Nu skriver vi den bitmap-fil header til vores outfile, og vores bitmap info 49 00:03:07,020 --> 00:03:09,880 header til vores outfile, og nu vi er klar til at begynde at gå 50 00:03:09,880 --> 00:03:11,990 over den aktuelle pixel. 51 00:03:11,990 --> 00:03:15,720 >> Så vi ønsker at gentage over den INFILE s skanderingslinjer. 52 00:03:15,720 --> 00:03:17,730 Så vi ønsker at gentage over oldheight. 53 00:03:17,730 --> 00:03:20,830 Det er derfor, vi har brug for at huske oprindelige højde, før vi ændrer det 54 00:03:20,830 --> 00:03:23,040 og skaleres det med n. 55 00:03:23,040 --> 00:03:27,810 Nu vil vi læse en enkelt række i infile 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 RGB tredobbelt, en pixel, og gamle bredde 58 00:03:36,190 --> 00:03:39,760 dem fra infile i vores buffer. 59 00:03:39,760 --> 00:03:43,480 Og det kommer til at være en hel række i dette array. 60 00:03:43,480 --> 00:03:50,390 Så nu ønsker vi at gentage n gange til udskrive denne rækken til vores outfile n gange. 61 00:03:50,390 --> 00:03:52,510 Og så er det, denne løkke gør. 62 00:03:52,510 --> 00:03:57,910 Denne indre løkke iteration over ro sig over array, trykning 63 00:03:57,910 --> 00:04:00,710 hver pixel i arrayet n gange. 64 00:04:00,710 --> 00:04:04,510 Så den nulte element udskrives n gange, er det første element er 65 00:04:04,510 --> 00:04:05,660 trykt n gange. 66 00:04:05,660 --> 00:04:10,820 Og der er en slags hvordan vi kommer til at vandret skala i outfile, og 67 00:04:10,820 --> 00:04:13,390 denne løkke, da vi looping n tider, er, hvordan vi kommer til at 68 00:04:13,390 --> 00:04:15,580 lodret skala. 69 00:04:15,580 --> 00:04:19,850 >> Hernede ser vi at vi er nødt til at tilføje polstringen ved slutningen af ​​hver række. 70 00:04:19,850 --> 00:04:25,050 Det er derfor, det er inde i for-løkken der er at udskrive de n rækker af bare 71 00:04:25,050 --> 00:04:28,400 denne ene række fra infile. 72 00:04:28,400 --> 00:04:32,150 Derefter ned her, vil jeg springe over polstringen i infile, da en gang 73 00:04:32,150 --> 00:04:34,560 vi er færdige med en række af de infile, behøver vi ikke bekymre sig om 74 00:04:34,560 --> 00:04:35,290 hvad polstringen var. 75 00:04:35,290 --> 00:04:37,110 Vi ønsker blot at komme til den anden række. 76 00:04:37,110 --> 00:04:40,870 Og så vil vi løkke tilbage og gøre alt dette igen for den anden række. 77 00:04:40,870 --> 00:04:44,406 >> Endelig, når vi er færdig med alt det, vi kan lukke infile tæt 78 00:04:44,406 --> 00:04:47,430 den outfile og afkast 0 fordi vi er færdige. 79 00:04:47,430 --> 00:04:50,330 >> Mit navn er Rob, og dette var resize. 80 00:04:50,330 --> 00:04:54,934 >> [Musikgengivelse]