>> [Glazba svira]
>> ROB Bowden: Bok.
Ja sam Rob i neka je veličina do ovog problema.
Tako ćemo početi s copy.c kao Predložak, ali mi ćemo biti
stvaranje vrlo malo promjena.
>> Sada vidimo da se odmah praviš promijeniti u kojem više ne provjeravamo
za naš rxc ne jednaka 3, ali sada Provjeravamo rc ne jednaka 4.
Budući da smo također žele uključiti u dopunom u datoteku i iz datoteke
Argumenti, f koja će biti to faktor kojim si mi skaliranje.
>> Dakle, nakon što smo sigurni u to, želimo koristiti s skeniranje f pretvoriti string
argv1 na plovak.
I mi ćemo se spremiti da faktor.
Ovaj dodatni lik pazeći da mi se zapravo ne ulazi
nešto poput 1,4 ABC na zapovjednoj liniji.
>> Sada ćemo stvoriti neke pseudonime budući RV2 i RV3 nisu
vrlo korisne imena.
Mi smo, umjesto toga, ide na poziv ih u datoteku i iz datoteke.
Sada ćemo biti sigurni da Naš faktor je zapravo vrijede.
Dakle, ako je faktor manji od ili jednak nula ili veće od 100, a zatim po
spec., trebamo odbaciti taj faktor.
>> Kad smo se uvjerili da je dobro, sad možemo otvoriti n datoteku, i moramo napraviti
sigurni da je uspješno otvorila.
Ako to nije učinio, da će se vratiti null.
Mi ćemo otvoriti out datoteku.
I opet, želimo provjeriti kako bi sigurni da uspješno je otvorila.
A ako to nije uspješno otvorili, a zatim moramo biti sigurni da zatvorite
n sliku koja je izvorno uspješno otvoren, inače imamo
otjecanje memorije.
>> Pa sad idemo čitati u bitmap file header i bitmap info
header od n datoteku.
Mi ćemo osigurati da n datoteka bila valjana bitmap.
OK.
>> Pa sad idemo na početak stvaranje neke promjene.
Pa zato što smo ide da se mijenja stvari, prvo želim sjetiti
stari širina n datoteke.
Mi želimo sjetiti starih punjenje od n datoteka koristeći isti izračun
iz copy.c.
>> A sad idemo mijenjati bitmap info header.
I tako smo se množenjem oba širinu i visina faktorom od
to je ono što smo skaliranje strane.
Idemo utvrditi Novi padding datoteke po
koristeći novu širinu.
I mi ćemo utvrditi novi Veličina slike pomoću broja
bajtova u jednom retku koji će se se broj piksela u tom retku
puta veći od piksela plus Broj bajtova padding na kraju
tog reda, i pomnoži sve to po broju redova koje imamo.
Tako da je broj bajtova imamo u našim slikovnih podataka.
>> Bf.Bfsize sada će biti broj bajtova u našem slike beta plus
veličina našeg zaglavlja.
Dakle plus veličina zaglavlja bitmap datoteke i veličinu bitmap info napadača.
OK.
Tako da je to za naše zaglavlja.
Možemo pisati glavu datoteka i Informacije header našem out
podnijeti, a mi smo dobri.
>> Sada je vrijeme da počnete zapravo pisanje piksel
Podaci na van datoteku.
Mi ćemo proglasiti tampon veličine Stari širina RGB trojke, a mi smo
će proglasiti varijablu otupio red, što je idemo
u početku postavili jednak negativnom 1.
Vidjet ćemo kako ćemo se pomoću da bi se pratiti što
red Trenutno imamo učitava u ovoj tampon.
OK.
>> Tako sada za razliku od standardnog izdanja, umjesto iterating nad na in
file, idemo ponoviti tijekom svake redak u datoteci van i shvatiti
koji redak u datoteci u želimo stavite se u ovom retku u datoteci van.
Dakle iterating preko svih redova u out file pomoću nove visine, mi smo prvi
će odrediti red u stara podnijeti ćemo koristiti, koje smo
će učiniti tako da ovu struju red podijeljena faktor.
Tako da će nam dati redak u starom datoteke koje želimo.
>> Pa sad, ako otupio red nije jednako stari y, ćemo morati pročitati redak
da želimo u našoj monete tampon red.
Pa kako ćemo to učiniti?
Prvo, mi ćemo shvatiti položaj koji počinje taj red u
Izvorna datoteka.
Tako je kako je pozicija će biti prošlost sve naše zaglavlja i
Sada posljednjih stare y redaka.
>> I tako koliko je bajtova u jednom redu?
Opet, veličine RGB triple puta stara Širina plus stara padding, tako da je
broj bajtova u jednom retku.
I želimo preskočiti prošlosti stare y redaka.
Tako ćemo f traže, a mi smo pomoću traže set početi od
početku datoteke.
Idemo u f nastojati tom položaju u spisu, stavljajući nas na
s početkom u redu želimo čitati u našoj tampon.
>> Mi ćemo postaviti red otupio jednak starom y.
Pa sad, ako se povratna petlja i želimo taj isti red u naše iz datoteke,
onda nećemo čitati je ponovno nepotrebno.
Pa stvarno, otupio je red Samo optimizacije.
>> Konačno, idemo čitati u Trenutna red stara širina RGB trojke
da želimo iz izvorne datoteke.
Pa sad sad red sadrži piksele od Izvorna datoteka koje želimo
pisati u out datoteku.
Tako sada, baš kao i prije, umjesto iterating preko stare datoteke, trebamo
to ponoviti preko novih datoteka redovima.
Pa ovdje, umjesto da iterating preko svega od starih piksela koji je u monete redom,
želimo ponoviti tijekom sve piksela u našoj novoj datoteci u to
Posebno red.
>> Zašto želimo to učiniti?
Jer ovdje vidimo da nismo zapravo nužno koristiti sve
piksela u izvornoj datoteci.
Jer ako smo se smanjuje, što bi moglo zapravo žele preskočiti piksela.
A vidimo da je to -
x podijeljena faktor -
usko ogledala do ovdje gdje smo rekli y podijeljena faktor shvatiti da
stara y-og reda odgovara y-og reda u ovoj novoj datoteci.
>> Sada ćemo napisati sve ove piksela od starog redu
u našem novom redu.
Nakon što smo to učinili, moramo samo staviti padding na kraju našeg reda
A mi ćemo petlju leđa i nastaviti sve od reda u našoj novoj datoteci.
Na kraju, moramo zatvoriti naš stari podnijeti, zatvoriti našu novu datoteku, i povratak
nuli, jer sve je u redu.
>> Moje ime je Rob i to je pauza.
>> [Glazba svira]