1 00:00:00,000 --> 00:00:12,240 >> [MUSIK SPELA] 2 00:00:12,240 --> 00:00:15,870 >> ROB Bowden: Hej, Jag är Rob, låt oss prova det här på för storlek. 3 00:00:15,870 --> 00:00:21,100 Så vi återigen kommer att börja med i grunden en kopia av copy.c och 4 00:00:21,100 --> 00:00:22,860 göra några ändringar. 5 00:00:22,860 --> 00:00:26,280 Notera omedelbart ser vi en förändring, där i stället för att kontrollera om 6 00:00:26,280 --> 00:00:30,440 argc inte lika 3, vi vill kontrollera Om argc inte är lika med 4, eftersom 7 00:00:30,440 --> 00:00:34,350 Nu är vi inte bara ta in en infil och utfil, men vi ska också ta in 8 00:00:34,350 --> 00:00:38,980 n, vilket är det belopp som vi är skalning originalbilden med. 9 00:00:38,980 --> 00:00:44,340 När vi är säkra på det, vi kan bara konvertera n till ett heltal med hjälp atoi. 10 00:00:44,340 --> 00:00:48,760 >> Så, nu ska vi skapa några alias, bara ringa argv 2 infil, och 11 00:00:48,760 --> 00:00:54,240 argv 3 utfil eftersom argv 2 och argv 3 är inte särskilt hjälp namn. 12 00:00:54,240 --> 00:00:58,510 Nu vill vi kontrollera att n är inom de gränser som vi förväntar oss, så det 13 00:00:58,510 --> 00:01:02,910 spec anger att om det är mindre än eller lika med noll eller större än 100, 14 00:01:02,910 --> 00:01:08,580 då det är en ogiltig ändra storlek faktor, och vi bör varna användaren om detta. 15 00:01:08,580 --> 00:01:13,090 >> När vi är bortom allt vi kan äntligen öppna vår infil, och vi behöver 16 00:01:13,090 --> 00:01:16,270 att fel ska du kontrollera att den öppning inte misslyckas av någon anledning. 17 00:01:16,270 --> 00:01:19,860 Vi måste också öppna våra utfil, och igen felkontroll att se till att 18 00:01:19,860 --> 00:01:21,250 inte misslyckas av någon anledning. 19 00:01:21,250 --> 00:01:26,270 Men var säker på om öppnandet av utfil misslyckades att vi måste stänga 20 00:01:26,270 --> 00:01:29,040 den infil, som redan öppnat. 21 00:01:29,040 --> 00:01:33,690 >> Så, om man antar att inte misslyckas, då Vi är - precis som i copy.c-- 22 00:01:33,690 --> 00:01:36,140 går att läsa i rubriken från infil. 23 00:01:36,140 --> 00:01:40,130 Vi ska se till att det är en giltig bitmapp, men nu ska vi göra en del 24 00:01:40,130 --> 00:01:41,620 saker lite annorlunda. 25 00:01:41,620 --> 00:01:44,870 Så först, vi kommer att vilja minns den ursprungliga bredden och höjden 26 00:01:44,870 --> 00:01:48,290 av infil, eftersom vi kommer att att ändra det för utfil. 27 00:01:48,290 --> 00:01:53,890 Så nu kommer ihåg det för konstiga skäl bi.biheight, är negativ, och 28 00:01:53,890 --> 00:01:58,670 så den verkliga höjden, i positiv, vi vill ta det absoluta värdet. 29 00:01:58,670 --> 00:02:02,580 >> Nu är utfyllnaden kommer att vara samma beräkning som det var i copy.c, 30 00:02:02,580 --> 00:02:06,060 använder den gamla bredden, och nu är vi faktiskt går att förändra 31 00:02:06,060 --> 00:02:07,320 vad är i vårt huvud. 32 00:02:07,320 --> 00:02:11,200 Så vi kommer att multiplicera vår bredd av n, eftersom vi skalning bredden av 33 00:02:11,200 --> 00:02:15,100 n, multiplicera höjden med n, eftersom vi är skalning med n, och nu har vi 34 00:02:15,100 --> 00:02:19,250 beräkningen för en ny stoppning baserad på den nya bredden. 35 00:02:19,250 --> 00:02:21,840 >> Så nu måste vi ändra några andra områden i vår header. 36 00:02:21,840 --> 00:02:26,890 Bi.biSizeImage är tänkt att vara den storleken på alla byte i pixlarna 37 00:02:26,890 --> 00:02:28,520 och stoppning av bilden. 38 00:02:28,520 --> 00:02:34,190 Och så stor som en enda rad av vår bilden är storleken av RGB-trippel, storleken 39 00:02:34,190 --> 00:02:39,430 av en enda pixel, gånger antalet pixlar i rad, plus utfyllnaden vid 40 00:02:39,430 --> 00:02:40,910 i slutet av raden. 41 00:02:40,910 --> 00:02:45,200 Och sedan ska vi multiplicera det med absoluta värdet av vår höjd för att få 42 00:02:45,200 --> 00:02:48,350 det totala antalet byte i bilddata. 43 00:02:48,350 --> 00:02:53,050 bf.bfSize är bara det totala antalet byte i våra bilddata, så 44 00:02:53,050 --> 00:02:56,530 bi.biSizeImage, plus Storleken på våra huvuden. 45 00:02:56,530 --> 00:02:59,850 Så, lägga på storleken på bitmap-fil sidhuvud och storlek bitmapp info 46 00:02:59,850 --> 00:03:00,800 sidhuvud, OK. 47 00:03:00,800 --> 00:03:03,170 Så det är allt vi behöver förändring i våra huvuden. 48 00:03:03,170 --> 00:03:07,020 Nu ska vi skriva bitmappsfilen header till vår utfil, och vår bitmapp info 49 00:03:07,020 --> 00:03:09,880 header till vår utfil, och nu Vi är redo att börja gå 50 00:03:09,880 --> 00:03:11,990 under de verkliga pixlar. 51 00:03:11,990 --> 00:03:15,720 >> Så vi vill att iterera över den infil s skanningslinjer. 52 00:03:15,720 --> 00:03:17,730 Så vi vill att iterera över oldheight. 53 00:03:17,730 --> 00:03:20,830 Det är därför som vi behövde för att komma ihåg ursprungliga höjd, innan vi ändrar den 54 00:03:20,830 --> 00:03:23,040 och skalas det av n. 55 00:03:23,040 --> 00:03:27,810 Nu ska vi läsa en enda raden i infil in i en 56 00:03:27,810 --> 00:03:30,630 buffert storlek oldwidth. 57 00:03:30,630 --> 00:03:36,190 Så här, vi freading storlek RGB trippel, en pixel, och gamla bredd 58 00:03:36,190 --> 00:03:39,760 dem från infil i vår buffert. 59 00:03:39,760 --> 00:03:43,480 Och det kommer att bli en hel rad i denna matris. 60 00:03:43,480 --> 00:03:50,390 Så nu vill vi upprepa n gånger till Skriv ut den här raden till vår utfil n gånger. 61 00:03:50,390 --> 00:03:52,510 Och så det är vad denna slinga gör. 62 00:03:52,510 --> 00:03:57,910 Denna inre slinga iteration över ro sig över arrayen, tryckning 63 00:03:57,910 --> 00:04:00,710 varje bildelement i matrisen n gånger. 64 00:04:00,710 --> 00:04:04,510 Så den nollte elementet skrivs n gånger, är det första elementet är 65 00:04:04,510 --> 00:04:05,660 tryckt n gånger. 66 00:04:05,660 --> 00:04:10,820 Och det har liksom hur vi ska horisontellt skala i utfil, och 67 00:04:10,820 --> 00:04:13,390 denna slinga, eftersom vi looping n gånger, är hur vi ska 68 00:04:13,390 --> 00:04:15,580 vertikalt skala. 69 00:04:15,580 --> 00:04:19,850 >> Här nere ser vi att vi behöver lägga till stoppningen vid slutet av varje rad. 70 00:04:19,850 --> 00:04:25,050 Det är därför det är inne i för slingan som är att skriva ut de n rader av just 71 00:04:25,050 --> 00:04:28,400 denna rad från infil. 72 00:04:28,400 --> 00:04:32,150 Sedan ner här, kommer jag att hoppa över stoppning i infil, sedan en gång 73 00:04:32,150 --> 00:04:34,560 vi är klara med en rad av infil, bryr vi oss inte om 74 00:04:34,560 --> 00:04:35,290 vad utfyllnaden var. 75 00:04:35,290 --> 00:04:37,110 Vi vill bara komma till den andra raden. 76 00:04:37,110 --> 00:04:40,870 Och då kommer vi loop tillbaka och göra allt denna gång för den andra raden. 77 00:04:40,870 --> 00:04:44,406 >> Slutligen, när vi är klara med allt det där, vi kan stänga infil, nära 78 00:04:44,406 --> 00:04:47,430 den utfil och retur 0 eftersom vi är klara. 79 00:04:47,430 --> 00:04:50,330 >> Mitt namn är Rob, och detta var storleksförändring. 80 00:04:50,330 --> 00:04:54,934 >> [MUSIK SPELA]