>> [Musikk spilles]
>> ROB BOWDEN: Hei.
Jeg er Rob og la oss størrelse opp dette problemet.
Så vi kommer til å starte med copy.c som en mal, men vi kommer til å være
gjør ganske mange endringer.
>> Nå ser vi vi umiddelbart å gjøre en endre hvor vi ikke lenger kontroll
for vår RXC ikke lik 3, men nå Vi sjekker rc ikke lik fire.
Siden vi også ønsker å inkludere, i tillegg til de i filen og ut filer
argumenter, f som kommer til å være denne faktor som vi skalering.
>> Så når vi er sikker på at vi ønsker å bruke s scan f å konvertere strengen
argv1 til en flåte.
Og vi kommer til å lagre at i faktoren.
Denne ekstra karakter er å sørge at vi ikke er faktisk inn
noe sånt som 1,4 ABC på kommandolinjen.
>> Nå skal vi lage noen aliaser siden RV2 og RV3 er ikke
svært nyttige navn.
Vi er, i stedet, kommer til å ringe dem i filen og ut filen.
Nå skal vi sørge for at vår faktoren var faktisk gyldig.
Så hvis moment er mindre enn eller lik null eller større enn 100, så som per
spec, bør vi forkaste som faktor.
>> Når vi er sikker på at det er bra, nå kan vi åpne n fil, og vi har å gjøre
sikker på at det var vellykket åpnet.
Hvis det gjorde det ikke, vil det returnere null.
Vi kommer til å åpne ut filen.
Og igjen, ønsker vi å sjekke for å være sikker på at det er vellykket åpnet.
Og hvis det ikke lykkes åpne, deretter vi må også være sikker på å lukke
n fil som opprinnelig vellykket åpnet, eller annet vi har en
minnelekkasje.
>> Så nå skal vi lese i bitmap filhodet og bitmap info
header fra n-filen.
Vi kommer til å sørge for at n fil var en gyldig bitmap.
OK.
>> Så nå skal vi begynne å gjøre noen endringer.
Så fordi vi kommer til å være i endring ting, vi først ønsker å huske
old bredden av n-filen.
Vi ønsker å huske den gamle padding av n fil ved å bruke samme beregnings
fra copy.c.
>> Og nå skal vi endre bitmap info header.
Og så er vi multiplisere både bredden og høyden med faktor siden
det er det vi er skalering av.
Vi kommer til å bestemme ny padding av filen ved å
ved hjelp av den nye bredden.
Og vi kommer til å bestemme den nye størrelsen av bildet ved hjelp av antallet
bytes i en enkelt rad som kommer til å være antall piksler i den raden
ganger størrelsen av et bildepunkt pluss antall byte med polstring ved enden
av den raden, og multiplisere alt som med antall rader som vi har.
Så det er antall byte vi har i våre bildedata.
>> Bf.Bfsize nå kommer til å være nummer byte i vårt bilde beta pluss
størrelsen på våre overskrifter.
Så pluss størrelsen på bitmap fil header og størrelsen på bitmap info header.
OK.
Så det er det for våre overskrifter.
Vi kan skrive filen hodet og info header til vår ut
fil, og vi er flinke.
>> Nå er det på tide å begynne å faktisk skrive pixel
data til ut filen.
Vi kommer til å erklære en buffer på størrelse gammel bredde RGB tripler, og vi er
kommer til å erklære en variabel kalt rad nummen, som er at vi kommer til å
utgangspunktet satt lik negative 1.
Vi vil se at vi kommer til å bruke at for å holde oversikt over hva
rad vi i dag har lastet inn i denne buffer.
OK.
>> Så nå i motsetning til standardutgaven, i stedet for itera over på i
fil, kommer vi til å iterere over hver rad i den ut-filen og finne ut
hvilken rad i i filen vi ønsker å plassere i denne raden i ut-filen.
Så gjentar fremfor alle radene i ut filen ved hjelp av den nye høyden, vi er først
kommer til å bestemme den rad i det gamle fil vi kommer til å bruke, som vi er
kommer til å gjøre ved å ta denne strømmen rad delt på faktor.
Så det kommer til å gi oss raden i den gamle filen som vi ønsker.
>> Så nå hvis rad nummen ikke lik gammel y, vi er nødt til å lese rad
at vi ønsker inn i vår nå rad buffer.
Så hvordan skal vi gjøre det?
Først skal vi finne ut av posisjon som begynner den raden i
originalfilen.
For at posisjonen skal være forbi alle våre overskrifter og
nå forbi gamle y rader.
>> Og så hvor mange byte er i en enkelt rad?
Igjen, størrelse med RGB trippel ganger gammel bredden pluss gamle padding, så det er
antall byte i en enkelt rad.
Og vi ønsker å hoppe forbi gamle y rader.
Så vi kommer til å f søke og vi er bruker søke satt til å starte fra
begynnelsen av en fil.
Vi kommer til å f søke på denne stillingen i filen, setter oss på
begynnelsen av raden vi ønsker å lese i vår buffer.
>> Vi kommer til å sette rad nummen lik gammel y.
Så nå hvis vi sløyfe tilbake og vi ønsker å bruke samme rad i vår ut filen,
da vi ikke kommer til å lese den inn igjen unødvendig.
Så egentlig, er rad nummen bare en optimalisering.
>> Til slutt kommer vi til å lese inn i gjeldende rad den gamle bredden RGB tredobler
at vi vil ha fra den opprinnelige filen.
Så nå nå rad inneholder pikslene fra den opprinnelige filen som vi ønsker å
skrive inn den ut filen.
Så nå, på samme måte som ovenfor, istedenfor itera over den gamle filen, trenger vi
det å iterere over de nye filene radene.
Vel her, i stedet for itera over alt av de gamle piksler som i nå rad,
vi ønsker å iterere over alle piksler i vår nye fil i dette
bestemt rad.
>> Hvorfor ønsker vi å gjøre det?
Fordi vi ser her at vi ikke er faktisk nødvendigvis ved hjelp av alle de
piksler i den opprinnelige filen.
Fordi hvis vi krymper, kanskje vi faktisk ønsker å hoppe over piksler.
Og vi ser at dette -
x delt på faktor -
speil tett opp her hvor vi sier y delt på faktor å regne ut at
den gamle y-te rad tilsvarer den y-te rekke i denne nye fil.
>> Nå skal vi skrive alle disse piksler fra gamle rad
inn i vårt nye rad.
Når vi har gjort det, må vi bare sette padding på slutten av vår rad
og vi vil sløyfe tilbake og fortsette i alle radene i vår nye fil.
På slutten, må vi stenge vår gamle fil, avslutter vår nye filen, og retur
null fordi alt gikk fint.
>> Mitt navn er Rob, og dette var Recess.
>> [Musikk spilles]