>> [Musikk spilles]
>> ROB Bowden: Hei, jeg heter Rob, la oss prøv dette på for størrelse.
Så er vi igjen kommer til å starte med i utgangspunktet en kopi av copy.c, og
gjøre noen endringer.
Merk umiddelbart ser vi en endring, der stedet for å sjekke for å se om
argc ikke lik 3, ønsker vi å sjekke hvis argc ikke er lik 4, ettersom
nå er vi ikke bare tar i et infile og outfile, men vi er også å ta i
n, som er beløpet som vi er skalering det opprinnelige bildet ved.
Når vi er sikker på det, kan vi bare konvertere n til et heltall ved hjelp atoi.
>> Så, nå skal vi lage noen aliaser, bare ring argv to infile, og
argv 3 outfile, fordi argv 2 og argv 3 er ikke veldig nyttige navn.
Nå ønsker vi å sjekke at n er innenfor grensene forventer vi, så det
spec presiserer at hvis det er mindre enn eller er lik null eller større enn 100,
så det er en ugyldig resize faktor, og vi bør advare brukeren av den.
>> Når vi er hinsides alt det, kan vi endelig åpne vår infile, og vi trenger
til feil må du kontrollere at Åpningen ikke mislykkes eller annen grunn.
Vi trenger også å åpne vår outfile, og igjen Feil sjekke for å være sikker på at
ikke mislykkes eller annen grunn.
Men være sikker på om åpningen av outfile mislyktes at vi må lukke
den infile, som allerede åpnet.
>> Så, forutsatt at ikke mislykkes, da we're - akkurat som i copy.c--
kommer til å lese i overskriften fra infile.
Vi kommer til å sørge for at det er en gyldig bitmap, men nå vi kommer til å gjøre noen
ting litt annerledes.
Så først, vi kommer til å ønske å husker den opprinnelige bredde og høyde
av infile, fordi vi kommer til å være i endring det for outfile.
Så nå må du huske at for merkelige grunner bi.biheight, er negativ, og
så selve høyden, i positiv, vi ønsker å ta den absolutte verdien.
>> Nå blir polstringen kommer til å være den samme beregning som det var i copy.c,
bruker den gamle bredden, og nå er vi faktisk kommer til å endre
hva er i vår header.
Så vi kommer til å mangedoble vår bredde av n, siden vi skalere bredden av
n, multiplisere høyden med n, siden vi er skalering av n, og nå har vi
beregningen for en ny padding basert på den nye bredde.
>> Så nå må vi endre noen andre felt i vår header.
Bi.biSizeImage er ment å være den størrelsen på alle bytene i piksler
og padding av bildet.
Og slik at størrelsen av en enkelt rad av vår bilde er størrelsen på RGB trippel, størrelsen
av en enkelt piksel, ganger antall piksler på rad, pluss padding på
enden av raden.
Og så kommer vi til å multiplisere at ved absoluttverdien av våre høyde for å komme
det totale antall byte i bildedataene.
bf.bfSize er bare det totale antall byte i våre bildedata, så
bi.biSizeImage, pluss Størrelsen på våre overskrifter.
Så, legge på størrelsen på bitmap fil header, og størrelsen på bitmap-info
header, OK.
Så det er alt vi trenger for å endre i våre overskrifter.
Nå skal vi skrive bitmap fil header til vår outfile, og vår bitmap info
header til vår outfile, og nå vi er klar til å begynne å gå
over den faktiske piksler.
>> Så vi ønsker å iterere over den INFILE sin skannelinjer.
Så vi ønsker å iterere over oldheight.
Dette er grunnen til at vi trengte å huske opprinnelige høyde, før vi endrer det
og skalert det ved n.
Nå skal vi lese en enkelt rad på infile inn i en
buffer størrelse oldwidth.
Så her er vi freading størrelse med RGB trippel, én piksel, og gamle bredden av
dem fra infile i vår buffer.
Og det kommer til å bli en hel rad i denne tabellen.
Så nå ønsker vi å reagere n ganger til skrive ut denne raden til vår outfile n ganger.
Og så det er hva denne sløyfen gjør.
Denne indre løkken itera over ror seg selv, over rekken, trykking
hver piksel i matrisen n ganger.
Så zeroth element blir skrevet ut n ganger, er det første elementet er
trykt n ganger.
Og det er liksom hvordan vi skal horisontalt skalere i outfile, og
denne sløyfen, siden vi looping n ganger, er hvordan vi skal
vertikalt skala.
>> Ned her, ser vi at vi må legge til polstringen ved slutten av hver linje.
Det er derfor dette er inne i for loop det er å skrive ut de n rader med bare
dette en rad fra infile.
Deretter ned her, kommer jeg til å hoppe over utfyllingen i infile, siden en gang
vi er ferdig med en rad av infile, bryr vi oss ikke om
hva padding var.
Vi ønsker bare å få til den andre raden.
Og så får vi sløyfe tilbake og gjøre alt dette igjen for den andre raden.
>> Til slutt, når vi er ferdig med alt det, vi kan lukke infile, tett
den outfile, og retur 0 fordi vi er ferdige.
>> Mitt navn er Rob, og dette var resize.
>> [Musikk spilles]