>> [Muziek]
>> ROB BOWDEN: Hoi, ik ben Rob, laten we probeer dit op voor de grootte.
Zo, zijn we weer gaan beginnen met in feite een kopie van de copy.c en
een paar wijzigingen.
Opmerking meteen zien we een verandering, waar in plaats van te controleren om te zien of
argc niet gelijk 3, willen wij nagaan Als argc niet gelijk 4, aangezien
nu zijn we niet gewoon in een infile en outfile, maar we zijn ook het nemen van
n, dat is het bedrag dat we schalen van de oorspronkelijke afbeelding door.
Zodra we zijn er zeker van dat, we kunnen gewoon converteren n naar een integer gebruik atoi.
>> Zo, nu gaan we wat maken aliassen, bel argv 2 infile, en
argv 3 outfile, omdat argv 2 en argv 3 zijn niet erg behulpzaam namen.
Nu willen we controleren om er zeker n binnen de grenzen die we verwachten, zodat de
spec bepaalt dat indien het minder dan of nul of groter dan 100,
dan is dat een ongeldige resize factor, en we moeten de gebruiker van die waarschuwen.
>> Als we eenmaal voorbij dat alles, we kunnen eindelijk open onze infile, en we moeten
voor fouten controleren om ervoor te zorgen dat de opening liet niet na om wat voor reden.
We moeten ook onze outfile openen, en weer fout controleren om ervoor te zorgen dat
liet niet na om wat voor reden.
Maar wees zeker of de opening van de outfile niet dat we moeten sluiten
de infile, die al werd geopend.
>> Dus, ervan uitgaande dat niet mislukt, dan We zijn - net als in copy.c--
ga u in de kop uit de infile.
We gaan ervoor zorgen dat het een geldige bitmap, maar nu gaan we wat doen
dingen een beetje anders.
Dus eerst gaan we naar willen denk aan de oorspronkelijke breedte en hoogte
van de infile, want we gaan veranderen het voor de outfile.
Dus nu niet vergeten dat voor vreemde redenen bi.biheight, negatief is, en
dus de werkelijke hoogte, in positieve, we willen de absolute waarde te nemen.
>> Nu de opvulling zal hetzelfde zijn berekening zoals het was in copy.c,
met behulp van de oude breedte, en nu zijn we eigenlijk gaat veranderen
wat in onze header.
Dus we gaan onze breedte vermenigvuldigen met n, omdat we aanpassen van de breedte van
n, vermenigvuldig de hoogte door n, omdat we schaalvergroting door n, en nu hebben we
de berekening van een nieuwe vulling gebaseerd op de nieuwe breedte.
>> Dus nu moeten we wat veranderen andere gebieden in onze header.
Bi.biSizeImage wordt verondersteld het te zijn grootte van alle bytes in de pixels
en opvulling van het beeld.
En de grootte van een enkele rij van onze afbeelding is de grootte van RGB triple, de grootte
van een pixel, maal het aantal pixels in een rij, plus de padding op
het einde van de rij.
En dan gaan we dat vermenigvuldigt absolute waarde van onze hoogte te krijgen
het totale aantal bytes in de beeldgegevens.
bf.bfSize is gewoon het totaal aantal bytes in onze beeldgegevens, zodat
bi.biSizeImage, plus de grootte van onze headers.
Dus, het toevoegen van de grootte van bitmapbestand header, en de grootte van de bitmap info
header, OK.
Dus dat is alles wat we nodig hebben om om in ons headers.
Nu gaan we de bitmap-bestand header schrijven onze outfile, en onze bitmap info
header onze outfile, en nu we zijn klaar om te beginnen gaan
over de werkelijke pixels.
>> Dus we willen meer dan herhalen scanlijnen de infile's.
Dus we willen oldheight itereren over.
Dit is waarom we moesten denken aan de oorspronkelijke hoogte, voordat we veranderen
en geschaald door n.
Nu gaan we lezen een enkele rij van de infile een
buffer van omvang oldwidth.
Dus hier, we freading grootte van RGB triple, een pixel, en oude breedte van
ze uit de infile in onze buffer.
En dat gaat een hele zijn rij in deze array.
Dus nu willen we n keer te herhalen om print deze rij om onze outfile n keer.
En dus dat is wat deze lus doet.
Dit binnenste lus wordt itereren over de rij zelf, over de array, drukkerij
elk pixel in de matrix n keer.
Dus de nulde element wordt afgedrukt n keer, het eerste element is dat
afgedrukt n keer.
En dat is een soort van hoe we gaan horizontaal te schalen in de outfile en
deze lus, aangezien we looping n tijden, is hoe we gaan
verticaal schaal.
>> Hier beneden, zien we dat we nodig hebben om toe te voegen de bekleding aan het eind van elke rij.
Dat is waarom dit in de lus dat is het afdrukken van de n rijen van slechts
deze rij uit de infile.
Dan is hier beneden, ik ga dan overslaan de opvulling in de infile, want zodra
we zijn klaar met een rij van de infile, hebben we niet de zorg over
wat de vulling was.
We willen gewoon de tweede rij te krijgen.
En dan gaan we loop terug en alles doen deze opnieuw voor de tweede rij.
>> Tot slot, als we klaar zijn met dat alles, kunnen we de infile sluiten, dicht
de outfile en rendement 0 omdat we klaar zijn.
>> Mijn naam is Rob, en dit was resize.
>> [Muziek]