[MUSIK SPELA] ROB Bowden: Hej, Jag är Rob, låt oss prova det här på för storlek. Så vi återigen kommer att börja med i grunden en kopia av copy.c och göra några ändringar. Notera omedelbart ser vi en förändring, där i stället för att kontrollera om argc inte lika 3, vi vill kontrollera Om argc inte är lika med 4, eftersom Nu är vi inte bara ta in en infil och utfil, men vi ska också ta in n, vilket är det belopp som vi är skalning originalbilden med. När vi är säkra på det, vi kan bara konvertera n till ett heltal med hjälp atoi. Så, nu ska vi skapa några alias, bara ringa argv 2 infil, och argv 3 utfil eftersom argv 2 och argv 3 är inte särskilt hjälp namn. Nu vill vi kontrollera att n är inom de gränser som vi förväntar oss, så det spec anger att om det är mindre än eller lika med noll eller större än 100, då det är en ogiltig ändra storlek faktor, och vi bör varna användaren om detta. När vi är bortom allt vi kan äntligen öppna vår infil, och vi behöver att fel ska du kontrollera att den öppning inte misslyckas av någon anledning. Vi måste också öppna våra utfil, och igen felkontroll att se till att inte misslyckas av någon anledning. Men var säker på om öppnandet av utfil misslyckades att vi måste stänga den infil, som redan öppnat. Så, om man antar att inte misslyckas, då Vi är - precis som i copy.c-- går att läsa i rubriken från infil. Vi ska se till att det är en giltig bitmapp, men nu ska vi göra en del saker lite annorlunda. Så först, vi kommer att vilja minns den ursprungliga bredden och höjden av infil, eftersom vi kommer att att ändra det för utfil. Så nu kommer ihåg det för konstiga skäl bi.biheight, är negativ, och så den verkliga höjden, i positiv, vi vill ta det absoluta värdet. Nu är utfyllnaden kommer att vara samma beräkning som det var i copy.c, använder den gamla bredden, och nu är vi faktiskt går att förändra vad är i vårt huvud. Så vi kommer att multiplicera vår bredd av n, eftersom vi skalning bredden av n, multiplicera höjden med n, eftersom vi är skalning med n, och nu har vi beräkningen för en ny stoppning baserad på den nya bredden. Så nu måste vi ändra några andra områden i vår header. Bi.biSizeImage är tänkt att vara den storleken på alla byte i pixlarna och stoppning av bilden. Och så stor som en enda rad av vår bilden är storleken av RGB-trippel, storleken av en enda pixel, gånger antalet pixlar i rad, plus utfyllnaden vid i slutet av raden. Och sedan ska vi multiplicera det med absoluta värdet av vår höjd för att få det totala antalet byte i bilddata. bf.bfSize är bara det totala antalet byte i våra bilddata, så bi.biSizeImage, plus Storleken på våra huvuden. Så, lägga på storleken på bitmap-fil sidhuvud och storlek bitmapp info sidhuvud, OK. Så det är allt vi behöver förändring i våra huvuden. Nu ska vi skriva bitmappsfilen header till vår utfil, och vår bitmapp info header till vår utfil, och nu Vi är redo att börja gå under de verkliga pixlar. Så vi vill att iterera över den infil s skanningslinjer. Så vi vill att iterera över oldheight. Det är därför som vi behövde för att komma ihåg ursprungliga höjd, innan vi ändrar den och skalas det av n. Nu ska vi läsa en enda raden i infil in i en buffert storlek oldwidth. Så här, vi freading storlek RGB trippel, en pixel, och gamla bredd dem från infil i vår buffert. Och det kommer att bli en hel rad i denna matris. Så nu vill vi upprepa n gånger till Skriv ut den här raden till vår utfil n gånger. Och så det är vad denna slinga gör. Denna inre slinga iteration över ro sig över arrayen, tryckning varje bildelement i matrisen n gånger. Så den nollte elementet skrivs n gånger, är det första elementet är tryckt n gånger. Och det har liksom hur vi ska horisontellt skala i utfil, och denna slinga, eftersom vi looping n gånger, är hur vi ska vertikalt skala. Här nere ser vi att vi behöver lägga till stoppningen vid slutet av varje rad. Det är därför det är inne i för slingan som är att skriva ut de n rader av just denna rad från infil. Sedan ner här, kommer jag att hoppa över stoppning i infil, sedan en gång vi är klara med en rad av infil, bryr vi oss inte om vad utfyllnaden var. Vi vill bara komma till den andra raden. Och då kommer vi loop tillbaka och göra allt denna gång för den andra raden. Slutligen, när vi är klara med allt det där, vi kan stänga infil, nära den utfil och retur 0 eftersom vi är klara. Mitt namn är Rob, och detta var storleksförändring. [MUSIK SPELA]