>> [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]