>> [Glazba svira]
>> ROB Bowden: Bok, ja sam Rob, hajdemo probati ovaj na za veličinu.
Dakle, opet će početi s osnovi kopija copy.c, a
napraviti nekoliko promjena.
Napomena odmah vidimo promjenu, gdje umjesto da provjere da li
argc ne jednaka 3, želimo provjeriti ako argc nije jednako 4, budući
Sada mi ne samo uzimati u infile i outfile, ali mi smo također uzimajući u
nje, što je iznos koji smo skaliranje izvornu sliku.
Nakon što smo sigurni u to, možemo samo pretvoriti u cijeli broj n pomoću atoi.
>> Dakle, sad ćemo stvoriti neke nadimci, samo zovi argv 2 infile, a
argv 3 outfile, jer argv 2 i argv 3 nisu jako korisne imena.
Sada želimo provjeriti kako bi bili sigurni n u granicama onoga što očekujemo, pa
spec. određuje da ako je manje ili jednak nuli, ili veći od 100,
onda je to valjan faktor promjena veličine, i mi trebali upozoriti korisnika o tome.
>> Jednom smo iznad svega što možemo konačno otvoriti našu INFILE, i moramo
pogreškama provjeriti kako bi bili sigurni da Otvaranje nije propustio iz nekog razloga.
Također moramo otvoriti naše outfile, a opet greška provjeriti kako bi bili sigurni da je
ne uspiju iz nekog razloga.
No, budite sigurni, ako otvaranje outfile uspjeli da trebamo zatvoriti
infile, koji je već bio otvoren.
>> Dakle, pod pretpostavkom da nije propustio, a zatim we're - baš kao u copy.c--
će se pročitati u zaglavlju iz infile.
Idemo kako bi bili sigurni da je valjana bitmap, ali sada ćemo napraviti neke
stvari malo drugačije.
Dakle, prvo, idemo se žele zapamtite izvornu širinu i visinu
od infile, jer ćemo treba ga mijenja za outfile.
Dakle, sada se sjetiti da je za neobičnog razloga bi.biheight, negativna, a
tako stvarna visina, u pozitivnom, mi žele uzeti apsolutnu vrijednost.
>> Sada, padding će biti isti Izračun kao što je bio u copy.c,
koristeći staru širinu, a sada smo zapravo neće promijeniti
ono što je u našoj napadača.
Tako ćemo umnožiti naše širinu n, jer smo skaliranje širinu
n, pomnožite visinu n, budući da smo skaliranje po n, a sada imamo
Izračun za novi padding temelji se na novoj širini.
>> Dakle, mi se sada morati promijeniti neke drugim poljima u našoj napadača.
Bi.biSizeImage je trebao biti veličina svih bajtova u pikselima
i padding slike.
I tako je veličina jednog reda od naših slika je veličina RGB triple, veličina
od jednog piksela, puta broj piksela u nizu, plus padding na
kraj reda.
A onda ćemo pomnožite to apsolutna vrijednost naše visine dobili
ukupan broj bajtova u slikovnih podataka.
bf.bfSize je samo ukupan broj bajtova u našim slikovnih podataka, tako da
bi.biSizeImage, plus veličina našeg zaglavlja.
Dakle, dodajući na veličinu bitmap datoteku header, a veličina bitmap informacija
header, OK.
Dakle, to je sve što nam je potrebno da se promijeniti u našim zaglavlja.
Sada ćemo napisati zaglavlje bitmap datoteku našem outfile, i naše bitmap informacija
header našem outfile, a sada smo spremni za početak ide
iznad samih piksela.
>> Na taj način želimo ponoviti više u infile je linija skeniranja.
Na taj način želimo ponoviti tijekom oldheight.
To je razlog zašto nam treba zapamtiti izvorna visina, prije nego što smo ga mijenjati
i to umanjiti n.
Sada ćemo čitati jednu redak infile u
buffer veličine oldwidth.
Pa evo, mi smo freading veličina RGB triple, jedan piksel, a stara širina
ih iz infile u našoj tampon.
I to će biti cijela red u ovom polju.
Tako sada, želimo ponoviti n puta za ispisati ovaj redak našem outfile n puta.
I to je ono što ova petlja se radi.
Ova unutarnja petlja se iterating više se red, preko polja, tiskanje
svaki piksel u nizu n puta.
Dakle nultoga element se ispisuje n puta, prvi element se bude
tiskani n puta.
I to je vrsta kako ćemo vodoravno razmjera u outfile, a
ova petlja, jer smo petlje n puta, kako ćemo
vertikalno mjerilo.
>> Ovdje dolje, vidimo da nam je potrebno dodati padding na kraju svakog reda.
To je razlog zašto je to unutar for petlje koji je ispisivao n redaka samo
ovo je jedan red od infile.
Onda ovdje, ja ću preskočiti padding u infile, jer jednom
gotovi smo s jednim redom infile, mi ne stalo
ono padding je.
Mi samo želimo da se na drugom redu.
I onda ćemo petlje natrag i učiniti sve to opet za drugi red.
>> Konačno, nakon što smo završili sa svime što, možemo zatvoriti INFILE, u neposrednoj blizini
outfile i povratak 0, jer smo gotovi.
>> Moje ime je Rob, a to je promjena veličine.
>> [Glazba svira]