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