>> [Redare a muzicii]
>> ROB Bowden: Bună, eu sunt Rob, să încercați acest lucru pe de dimensiune.
Deci, suntem din nou de gând să înceapă cu de fapt o copie a copy.c, și
face câteva modificări.
Notă imediat vom vedea o schimbare, în cazul în care în loc de verificare pentru a vedea dacă
argc nu egal 3, ne-o dorim pentru a verifica dacă argc nu este egal cu 4, deoarece
acum nu doar a lua într-o infile și outfile, dar suntem, de asemenea, luând în
n, care este suma pe care suntem scalarea imaginea originală de.
Odată ce suntem siguri de asta, putem doar conversia n la un număr întreg folosind atoi.
>> Deci, acum vom crea unele pseudonime, suna doar argv 2 infile, și
argv 3 outfile, pentru că argv 2 și argv 3 nu sunt nume de foarte mare ajutor.
Acum vrem să asigurați-vă că n este în limitele ne așteptăm, astfel încât
spec. specifică faptul că, dacă este mai mică sau egală cu zero, sau mai mare de 100,
apoi că este un factor de redimensionare invalid, și noi ar trebui să avertizeze utilizatorul de care.
>> Odată ce suntem dincolo de toate acestea, putem deschide în cele din urmă infile noastră, și avem nevoie de
erorii verificați pentru a vă asigura că deschidere nu a eșuat pentru un motiv oarecare.
De asemenea, avem nevoie pentru a deschide outfile noastră, și din nou eroare verificați pentru a vă asigura că
nu a eșuat pentru un motiv oarecare.
Dar asigurați-vă că în cazul în care deschiderea a outfile nu a reușit de care avem nevoie pentru a închide
infile, care a fost deja deschis.
>> Deci, presupunând că nu reușesc, atunci Suntem - la fel ca în copy.c--
va citi în antetul din infile.
Vom asigurați-vă că este un valid bitmap, dar acum vom face unele
lucrurile un pic diferit.
Deci, în primul rând, am de gând să doriți să amintiți-vă lățimea și înălțimea inițială
a infile, pentru că vom fie că este vorba schimba pentru outfile.
Deci, acum, amintiți-vă că, din motive ciudate bi.biheight, este negativ, și
astfel încât înălțimea reală, în pozitiv, am doresc să ia valoarea absolută.
>> Acum, padding va fi la fel calcul așa cum a fost în copy.c,
folosind lățimea vechi, iar acum suntem de fapt se va schimba
ceea ce este în antet nostru.
Așa că am de gând să se multiplice lățime nostru de n, din moment ce suntem scalarea lățimea de
n, înmulțiți înălțimea de n, deoarece suntem scalarea de n, iar acum ne-am
calcul pentru o nouă umplutură bazat pe noul lățimea.
>> Deci, acum avem nevoie pentru a schimba unele alte domenii în antet nostru.
Bi.biSizeImage se presupune a fi Dimensiunea reprezintă toți octeții din pixelii
și padding imaginii.
Și astfel dimensiunea de un singur rând de nostru imagine este marimea RGB triplu, dimensiunea
de un singur pixel, ori numărul de pixeli într-un rând, plus padding la
sfârșitul rândului.
Și apoi vom multiplica că, prin valoare absolută de înălțime nostru pentru a primi
numărul total de octeți în datele de imagine.
bf.bfSize este doar numărul total de bytes din datele noastre de imagine, așa
bi.biSizeImage, plus Dimensiunea de antete noastre.
Deci, adăugarea de dimensiunea fișierului bitmap antet, și dimensiunea de informații bitmap
antet, OK.
Deci, asta e tot ce avem nevoie pentru a schimba în anteturile noastre.
Acum vom scrie antetul fișierului bitmap la outfile noastră, și info nostru bitmap
header la outfile noastră, și acum suntem gata pentru a începe a merge
peste pixelii reale.
>> Așa că vrem să itera peste linii de scanare INFILE lui.
Așa că vrem să itera peste oldheight.
Acesta este motivul pentru care trebuie să-și amintească Înălțimea inițială, înainte de a ne schimba
și-l scalate de n.
Acum am de gând să citesc un singur rând de infile într-un
tampon de dimensiuni oldwidth.
Dimensiunea Deci, aici, suntem freading de RGB triplu, un pixel, și lățimea vechi de
le din infile în tampon nostru.
Și că va fi un întreg rând în această matrice.
Deci, acum, vrem să repeta de n ori la imprima acest rând la outfile nostru de n ori.
Și așa că e ceea ce această buclă este de a face.
Această buclă interioară este iterarea peste rând în sine, pe matrice, tipărirea
fiecare pixel din matrice de n ori.
Astfel încât elementul de grad zero se imprimă n ori, primul element este în curs
imprimate de n ori.
Și care este un fel de modul în care vom scară orizontală în outfile, și
această buclă, din moment ce suntem looping n ori, este modul în care vom
scară vertical.
>> Pe aici, vedem că avem nevoie pentru a adăuga padding la sfârșitul fiecărui rând.
De aceea, aceasta este în interiorul pentru bucla care se imprimă în cele n rânduri de doar
acesta rând din infile.
Apoi jos aici, am de gând să săriți peste padding în infile, deoarece o dată
am terminat cu un singur rând de infile, nu ne pasă de
ceea ce a fost padding.
Vrem doar să ajungem la al doilea rând.
Și apoi vom buclă înapoi și de a face tot aceasta din nou pentru al doilea rând.
>> În cele din urmă, odată ce am terminat cu toate astea, putem închide infile, aproape
outfile, și revenirea 0 pentru că am terminat.
>> Numele meu este Rob, iar acest lucru a fost de redimensionare.
>> [Redare a muzicii]