[Redare a muzicii] ROB BOWDEN: Hi. Sunt Rob și să marimea lui această problemă. Așa că am de gând să înceapă cu copy.c ca un șablon, dar vom fi a face destul de câteva modificări. Acum vom vedea facem imediat un schimba în cazul în care suntem nu mai verificare pentru RXC noastră nu egal cu 3, dar acum suntem verificarea rc nu este egal 4. Din moment ce ne-am dori, de asemenea, să includă, în afară de la dosar și din fișierele argumente, f, care va fi aceasta factor de care suntem de scalare. Deci, odată ce suntem siguri de asta, vrem să folosi s scanare f pentru a converti șirul argv1 la un float. Și vom stoca că în factor. Acest caracter suplimentar este de a face sigur care nu sunt de fapt intra ceva de genul 1.4 ABC la linia de comandă. Acum vom crea niște pseudonime din RV2 și RV3 nu sunt nume de foarte mare ajutor. Suntem, în schimb, va suna le în dosar și în afară de fișiere. Acum am de gând să vă asigurați că Factorul nostru a fost de fapt validă. Deci, dacă factorul este mai mic sau egal cu zero sau mai mare de 100, atunci conform spec., trebuie să respingem acest factor. Când suntem siguri că e bine, acum putem deschide fișierul n, și avem de a face vă că acesta a fost deschis cu succes. În cazul în care nu a făcut, că se va întoarce null. Vom deschide fișierul afară. Și din nou, vrem să verificați pentru a vă vă că este deschis cu succes. Și dacă aceasta nu a deschis cu succes, atunci avem nevoie, de asemenea, pentru a fi sigur pentru a închide fișierul n care inițial cu succes deschis, sau altfel avem o scurgere de memorie. Deci, acum vom citi în bitmap antet fișier și informații bitmap antet de la dosar nr. Mergem să ne asigurăm că n dosar a fost un bitmap valabil. OK. Deci, acum vom începe face unele modificări. Așa că am de gând să se schimbe lucrurile, dorim în primul rând să-și amintească lățime vechi din dosarul nr. Vrem să ne amintim padding vechi de fișierul n folosind aceeași calcul din copy.c. Și acum am de gând să schimbe info bitmap antetul. Și așa suntem înmulțirea atât lățimea și înălțimea de factorul deoarece asta e ceea ce suntem de scalare. Mergem pentru a determina nou padding a dosarului de folosind noua lățimea. Și vom stabili noi dimensiune a imaginii folosind numărul de octeți într-un singur rând care urmează să fie numărul de pixeli din acel rând ori de marimea unui pixel plus Numărul de octeți de umplutură, la sfârșitul de care rând, și înmulțirea toate că de numărul de rânduri pe care le avem. Deci, asta e numarul de bytes avem în datele noastre de imagine. Bf.Bfsize acum va fi numărul de de bytes în imaginea noastră beta plus dimensiunea de antete noastre. Dimensiunea astfel plus de antet fișier bitmap și dimensiunea de informații antet bitmap. OK. Deci asta este pentru antete noastre. Putem scrie capul de fișiere și info antet de la noastră dosar, iar noi suntem bine. Acum este timpul pentru a începe de fapt scris pixel date în dosarul de afară. Vom declara un tampon de dimensiune vechi lățime RGB triplează, iar noi suntem O să declare o variabilă numită amortit rând, care este vom inițial egală cu negativ 1. Vom vedea că am de gând să fie utilizând că, în scopul de a urmări ceea ce rând am în prezent s-au încărcat în acest tampon. OK. Deci, acum, spre deosebire de ediția standard de, în loc de iterarea peste cel în fișier, vom repeta pe fiecare rând în fișierul de ieșire și dau seama care rând în fișierul în dorim să loc în acest rând în fișierul afară. Astfel iterarea peste toate rândurile în out fișier folosind noul înălțime, suntem în primul rând merge pentru a determina rândul în vechea fișier vom folosi, pe care suntem de gând să facă acest lucru prin luarea de curent rând împărțit de factor. Așa că o să ne dea rândul în fișierul vechi pe care ne-o dorim. Deci, acum, dacă nu rând amortit si nu egal vechi, am de gând să trebuie să citească rândul pe care ne-o dorim în tampon nostru rând actuală. Deci, cum vom face asta? În primul rând, am de gând să dau seama de poziție care începe acel rând în fișierul original. Astfel că poziția va fi trecut toate anteturile noastre și vechi rânduri y acum trecute. Și astfel cât de multe bytes sunt într-un singur rând? Din nou, dimensiunea de RGB ori triple vechi lățime plus padding vechi, astfel încât este numărul de octeți de pe un singur rând. Și vrem să săriți peste vechi rânduri y trecute. Așa că am de gând să f caute și suntem folosind caută setat pentru a porni de la începutul unui fișier. Vom f caute la această poziție în dosar, pune-ne la începând din rândul ne-o dorim pentru a citi în tampon nostru. Vom stabili rând amortit egal cu vechi y. Deci, acum, dacă ne-am bucla înapoi și vrem să pentru aceeași linie în fișierul nostru afară, atunci noi nu vom citi l din nou în mod inutil. Deci, într-adevăr, rând este amortit doar o optimizare. În cele din urmă, vom citi în rândul curent vechi lățime RGB triplează pe care ne-o dorim de la fișierul original. Deci, acum rândul actuală conține pixeli de la fișierul original pe care dorim să scrie în fișierul afară. Deci, acum, la fel ca mai sus, în loc de iterarea peste fișierul vechi, avem nevoie de aceasta pentru a itera peste noi fișiere rânduri. Ei bine, aici, în loc de iterarea peste tot de vechi pixelii care în rând actuală, ne-o dorim pentru a itera peste tot a pixeli în noua dosar în acest particular rând. De ce vrem să facem asta? Pentru că vedem aici că noi nu suntem de fapt, în mod obligatoriu, folosind toate pixeli în fișierul original. Pentru că dacă suntem în scădere, am putea de fapt, doriți să săriți peste pixeli. Și vom vedea că acest lucru - x împărțit la factorul - oglinzi atent aici, unde ne spune y împărțit de factor să dau seama că rândul y-lea vechi corespunde rândul-y-lea în acest nou dosar. Acum am de gând să scrie toate aceste pixeli din rândul vechi în noua noastră linie. După ce am făcut asta, avem nevoie de doar pune umplutura la sfârșitul rândul nostru și ne vom buclă înapoi și să continue pentru toate rândurile din noul nostru dosar. La sfârșitul anului, avem nevoie pentru a închide vechiul nostru fișier, închideți noul nostru dosar, și retur zero, pentru că totul a mers bine. Numele meu este Rob și acest lucru a fost Recess. [Redare a muzicii]