>> [MUSIC Playing]
>> Rob Bowden: Hi, unë jam Rob, le të provoni këtë në për madhësinë.
Pra, ne përsëri do të fillojë me në thelb një kopje e copy.c, dhe
bëjë disa ndryshime.
Vini re menjëherë shohim një ndryshim, ku në vend të kontrolluar për të parë nëse
argc nuk të barabartë 3, ne duam të kontrolloni nëse argc nuk ka të barabartë 4, që nga
tani ne nuk jemi vetëm duke marrë në një infile dhe outfile, por ne jemi edhe duke marrë në
n, e cila është shuma që ne jemi shkallë imazhin origjinal nga.
Pasi ne jemi të sigurt për këtë, ne mund vetëm të konvertohet N tek një numër i plotë i përdorur atoi.
>> Pra, tani ne jemi duke shkuar për të krijuar disa emërtimet, vetëm thirrje ARGV 2 infile, dhe
ARGV 3 outfile, sepse ARGV 2 dhe ARGV 3 nuk janë emra shumë të dobishme.
Tani ne duam të kontrolluar për të siguruar n është brenda kufijve të presim, kështu
spekulim specifikon se në qoftë se kjo është më pak se ose e barabarte me zero, ose me i madh se 100,
atëherë kjo është një faktor i pavlefshëm resize, dhe ne duhet të paralajmërojnë përdoruesit e se.
>> Pasi ne jemi përtej të gjitha që, ne mund më në fund hapur infile tonë, dhe ne kemi nevojë
të gabimit të kontrolluar për të siguruar që Hapja nuk dështojnë për disa arsye.
Ne gjithashtu duhet të hapur outfile tonë, dhe përsëri error kontrolloni për të siguruar që
nuk dështojnë për disa arsye.
Por të jetë i sigurt nëse hapja e outfile dështuar që ne kemi nevojë për të mbyllur
infile, e cila është hapur tashmë.
>> Pra, duke supozuar se nuk dështojnë, atëherë we're - ashtu si në copy.c--
do të lexoni në kokë nga infile.
Ne jemi duke shkuar për t'u siguruar se është një e vlefshme bitmap, por tani ne jemi duke shkuar për të bërë disa
gjërat pak më ndryshe.
Pra, së pari, ne do të duan të mos harroni gjerësinë origjinale dhe lartësi
i infile, sepse ne jemi duke shkuar për të ndryshuar atë për outfile.
Deri tani mbani mend se për arsye të çuditshme bi.biheight, është negativ, dhe
kështu lartësia aktuale, në pozitive, ne duan të marrin vlerën absolute.
>> Tani, mbushje do të jenë të njëjta Llogaritja siç ishte në copy.c,
duke përdorur gjerësinë e vjetër, dhe tani ne jemi në të vërtetë do të ndryshojë
çfarë e në kokë tonë.
Pra, ne do të shumohen gjerësi tonë duke n, pasi ne jemi shkallë gjerësinë nga
n, shumohen lartësinë nga n, pasi ne jemi shkallë nga n, dhe tani ne kemi
llogaritja për një mbushje të re bazuar mbi gjerësi e re.
>> Deri tani ne kemi nevojë për të ndryshuar disa fusha të tjera në kokë tonë.
Bi.biSizeImage është menduar të jetë Madhësia e të gjitha bytes në pixels
dhe mbushje e imazhit.
Dhe kështu madhësinë e një rresht të vetëm të tonë Imazhi është madhësia e RGB trefishtë, madhësia
e një pixel vetme, herë numrin e piksele në një rresht, plus mbushje në
në fund të rreshtit.
Dhe pastaj ne do të shumohen se nga vlera absolute e lartësisë tonë për të marrë
numri i përgjithshëm i bytes në të dhënat e imazhit.
bf.bfSize është vetëm numri i përgjithshëm i bytes në të dhënat tona imazhit, kështu
bi.biSizeImage, plus Madhësia e headers tona.
Pra, duke shtuar nga madhësia e skedarit bitmap header, dhe madhësia e info bitmap
header, OK.
Pra, kjo është e gjitha ne kemi nevojë për të ndryshojë në headers tona.
Tani ne do të shkruani skedarit bitmap header të outfile tonë, dhe info tonë bitmap
header për outfile tonë, dhe tani ne jemi gati për të filluar duke shkuar
mbi pixels aktuale.
>> Pra, ne duam të iterate mbi scan linjat e infile-së.
Pra, ne duam të iterate mbi oldheight.
Kjo është arsyeja pse ne kemi nevojë për të kujtuar lartësia origjinal, para se të ndryshuar atë
dhe luspa atë me n.
Tani ne jemi duke shkuar për të lexuar një të vetme rresht i infile në një
buffer të madhësisë oldwidth.
Pra këtu, ne jemi freading Madhësia e RGB trefishtë, e pixel, dhe gjerësia e vjetër e
ata nga infile në tampon tonë.
Dhe kjo do të jetë një të tërë rresht në këtë rrjet.
Deri tani, ne duam të iterate herë n për të printoni këtë rresht për të outfile n herë tonë.
Dhe kështu kjo është ajo që është duke e bërë këtë lak.
Kjo loop brendshme është iterating mbi rresht veten, mbi array, shtypjen
çdo piksel në rrjet n herë.
Pra, elementi 0 është duke u shtypur n herë, elementi i parë është qenit
shtypura herë n.
Dhe kjo është lloj i si ne jemi duke shkuar për horizontalisht shkallë në outfile, dhe
kjo loop, pasi ne jemi duke looping n herë, është se si ne jemi duke shkuar për
shkallë vertikalisht.
>> Poshtë këtu, shohim se ne kemi nevojë për të shtuar mbushje në fund të çdo rresht.
Kjo është arsyeja pse kjo është brenda për lak që është shtypjen nga rreshtat n e vetëm
ky rresht një nga infile.
Pastaj këtu poshtë, unë jam duke shkuar për të kaloni mbi mbushje në infile, që nga një herë
ne jemi duke bërë me një rresht të infile, ne nuk e kujdesit për
çfarë ishte mbushje.
Ne vetëm duam të shkuar në rreshtin e dytë.
Dhe pastaj ne do të loop mbrapa dhe bën të gjitha kjo përsëri për rreshtin e dytë.
>> Së fundi, pasi ne jemi bërë me të gjitha që, ne mund të mbyllë infile, afër
outfile, dhe kthimi 0 sepse ne jemi bërë.
>> Emri im është Rob, dhe kjo ishte resize.
>> [MUSIC Playing]