>> [Musikgengivelse]
>> ROB BOWDEN: Hej, jeg er Rob, lad os prøv denne på for størrelse.
Så vi igen kommer til at starte med dybest set en kopi af copy.c, og
foretage nogle få ændringer.
Bemærk straks ser vi en forandring, hvor i stedet for at kontrollere, om
argc ikke lige 3, vi ønsker at kontrollere hvis argc ikke lig 4, eftersom
nu er vi ikke bare tage i en infile og outfile, men vi også tage i
n, hvilket er det beløb, som vi skalering originalbilledet.
Når vi er sikker på, at vi bare kan konvertere n til et heltal ved hjælp atoi.
>> Så nu vil vi skabe nogle aliaser, bare kalde argv 2 infile, og
argv 3 outfile, fordi argv 2 og argv 3 er ikke meget nyttige navne.
Nu ønsker vi at tjekke for at sikre n er inden for grænserne, vi forventer, så
spec specificerer at hvis det er mindre end eller lig med nul, eller større end 100,
så er et ugyldigt resize faktor, og vi bør advare brugeren af ​​det.
>> Når vi er ud over alt det, vi kan endelig åbner vores infile, og vi har brug for
til fejl tjekke for at sikre, at den åbning ikke svigte eller anden grund.
Vi er også nødt til at åbne vores outfile, og igen fejl skal du kontrollere, at
svigtede ikke en eller anden grund.
Men vær sikker på, om åbningen af ​​den outfile mislykkedes at vi er nødt til at lukke
den infile, som allerede blev åbnet.
>> Så under forudsætning af, der ikke svigter, så vi er klar - ligesom i copy.c--
kommer til at læse i overskriften fra infile.
Vi kommer til at sørge for det er et gyldigt bitmap, men nu vil vi gøre nogle
tingene lidt anderledes.
Så det første, vi kommer til at ønsker at huske den oprindelige bredde og højde
af infile, fordi vi kommer til at være at ændre det for outfile.
Så nu huske, at for mærkelige grunde bi.biheight, er negativ, og
så den faktiske højde, positiv, vi ønsker at tage den absolutte værdi.
>> Nu er polstring vil være den samme beregning, som det var i copy.c,
ved hjælp af den gamle bredde, og nu er vi faktisk kommer til at ændre
Hvad er der i vores header.
Så vi kommer til at formere vores bredde af n, da vi skalere bredden med
n, multipliceres højden med n, da vi er skalering af n, og nu har vi
beregningen for en ny polstring baseret på den nye bredde.
>> Så nu er vi nødt til at ændre nogle andre felter i vores hovedstød.
Bi.biSizeImage formodes at være den størrelsen på alle bytes i pixels
og polstring af billedet.
Og så størrelsen af ​​en enkelt række af vores Billedet størrelse RGB tredobbelt, størrelse
en enkelt pixel, gange antallet af pixels i træk, plus polstring på
enden af ​​rækken.
Og så vil vi formere sig, at ved absolutte værdi af vores højde for at få
det samlede antal bytes i billeddata.
bf.bfSize er bare det samlede antal bytes i vores billeddata, så
bi.biSizeImage, plus størrelsen af ​​vores overskrifter.
Så tilsætning af størrelsen på bitmap-fil header, og størrelsen af ​​bitmap-info
header, OK.
Så det er alt vi behøver at ændre i vores overskrifter.
Nu skriver vi den bitmap-fil header til vores outfile, og vores bitmap info
header til vores outfile, og nu vi er klar til at begynde at gå
over den aktuelle pixel.
>> Så vi ønsker at gentage over den INFILE s skanderingslinjer.
Så vi ønsker at gentage over oldheight.
Det er derfor, vi har brug for at huske oprindelige højde, før vi ændrer det
og skaleres det med n.
Nu vil vi læse en enkelt række i infile i en
buffer størrelse oldwidth.
Så her er vi freading størrelse RGB tredobbelt, en pixel, og gamle bredde
dem fra infile i vores buffer.
Og det kommer til at være en hel række i dette array.
Så nu ønsker vi at gentage n gange til udskrive denne rækken til vores outfile n gange.
Og så er det, denne løkke gør.
Denne indre løkke iteration over ro sig over array, trykning
hver pixel i arrayet n gange.
Så den nulte element udskrives n gange, er det første element er
trykt n gange.
Og der er en slags hvordan vi kommer til at vandret skala i outfile, og
denne løkke, da vi looping n tider, er, hvordan vi kommer til at
lodret skala.
>> Hernede ser vi at vi er nødt til at tilføje polstringen ved slutningen af ​​hver række.
Det er derfor, det er inde i for-løkken der er at udskrive de n rækker af bare
denne ene række fra infile.
Derefter ned her, vil jeg springe over polstringen i infile, da en gang
vi er færdige med en række af de infile, behøver vi ikke bekymre sig om
hvad polstringen var.
Vi ønsker blot at komme til den anden række.
Og så vil vi løkke tilbage og gøre alt dette igen for den anden række.
>> Endelig, når vi er færdig med alt det, vi kan lukke infile tæt
den outfile og afkast 0 fordi vi er færdige.
>> Mit navn er Rob, og dette var resize.
>> [Musikgengivelse]