1 00:00:00,000 --> 00:00:12,240 >> [MUSIC Playing] 2 00:00:12,240 --> 00:00:15,870 >> Rob Bowden: Hi, unë jam Rob, le të provoni këtë në për madhësinë. 3 00:00:15,870 --> 00:00:21,100 Pra, ne përsëri do të fillojë me në thelb një kopje e copy.c, dhe 4 00:00:21,100 --> 00:00:22,860 bëjë disa ndryshime. 5 00:00:22,860 --> 00:00:26,280 Vini re menjëherë shohim një ndryshim, ku në vend të kontrolluar për të parë nëse 6 00:00:26,280 --> 00:00:30,440 argc nuk të barabartë 3, ne duam të kontrolloni nëse argc nuk ka të barabartë 4, që nga 7 00:00:30,440 --> 00:00:34,350 tani ne nuk jemi vetëm duke marrë në një infile dhe outfile, por ne jemi edhe duke marrë në 8 00:00:34,350 --> 00:00:38,980 n, e cila është shuma që ne jemi shkallë imazhin origjinal nga. 9 00:00:38,980 --> 00:00:44,340 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. 10 00:00:44,340 --> 00:00:48,760 >> Pra, tani ne jemi duke shkuar për të krijuar disa emërtimet, vetëm thirrje ARGV 2 infile, dhe 11 00:00:48,760 --> 00:00:54,240 ARGV 3 outfile, sepse ARGV 2 dhe ARGV 3 nuk janë emra shumë të dobishme. 12 00:00:54,240 --> 00:00:58,510 Tani ne duam të kontrolluar për të siguruar n është brenda kufijve të presim, kështu 13 00:00:58,510 --> 00:01:02,910 spekulim specifikon se në qoftë se kjo është më pak se ose e barabarte me zero, ose me i madh se 100, 14 00:01:02,910 --> 00:01:08,580 atëherë kjo është një faktor i pavlefshëm resize, dhe ne duhet të paralajmërojnë përdoruesit e se. 15 00:01:08,580 --> 00:01:13,090 >> Pasi ne jemi përtej të gjitha që, ne mund më në fund hapur infile tonë, dhe ne kemi nevojë 16 00:01:13,090 --> 00:01:16,270 të gabimit të kontrolluar për të siguruar që Hapja nuk dështojnë për disa arsye. 17 00:01:16,270 --> 00:01:19,860 Ne gjithashtu duhet të hapur outfile tonë, dhe përsëri error kontrolloni për të siguruar që 18 00:01:19,860 --> 00:01:21,250 nuk dështojnë për disa arsye. 19 00:01:21,250 --> 00:01:26,270 Por të jetë i sigurt nëse hapja e outfile dështuar që ne kemi nevojë për të mbyllur 20 00:01:26,270 --> 00:01:29,040 infile, e cila është hapur tashmë. 21 00:01:29,040 --> 00:01:33,690 >> Pra, duke supozuar se nuk dështojnë, atëherë we're - ashtu si në copy.c-- 22 00:01:33,690 --> 00:01:36,140 do të lexoni në kokë nga infile. 23 00:01:36,140 --> 00:01:40,130 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 24 00:01:40,130 --> 00:01:41,620 gjërat pak më ndryshe. 25 00:01:41,620 --> 00:01:44,870 Pra, së pari, ne do të duan të mos harroni gjerësinë origjinale dhe lartësi 26 00:01:44,870 --> 00:01:48,290 i infile, sepse ne jemi duke shkuar për të ndryshuar atë për outfile. 27 00:01:48,290 --> 00:01:53,890 Deri tani mbani mend se për arsye të çuditshme bi.biheight, është negativ, dhe 28 00:01:53,890 --> 00:01:58,670 kështu lartësia aktuale, në pozitive, ne duan të marrin vlerën absolute. 29 00:01:58,670 --> 00:02:02,580 >> Tani, mbushje do të jenë të njëjta Llogaritja siç ishte në copy.c, 30 00:02:02,580 --> 00:02:06,060 duke përdorur gjerësinë e vjetër, dhe tani ne jemi në të vërtetë do të ndryshojë 31 00:02:06,060 --> 00:02:07,320 çfarë e në kokë tonë. 32 00:02:07,320 --> 00:02:11,200 Pra, ne do të shumohen gjerësi tonë duke n, pasi ne jemi shkallë gjerësinë nga 33 00:02:11,200 --> 00:02:15,100 n, shumohen lartësinë nga n, pasi ne jemi shkallë nga n, dhe tani ne kemi 34 00:02:15,100 --> 00:02:19,250 llogaritja për një mbushje të re bazuar mbi gjerësi e re. 35 00:02:19,250 --> 00:02:21,840 >> Deri tani ne kemi nevojë për të ndryshuar disa fusha të tjera në kokë tonë. 36 00:02:21,840 --> 00:02:26,890 Bi.biSizeImage është menduar të jetë Madhësia e të gjitha bytes në pixels 37 00:02:26,890 --> 00:02:28,520 dhe mbushje e imazhit. 38 00:02:28,520 --> 00:02:34,190 Dhe kështu madhësinë e një rresht të vetëm të tonë Imazhi është madhësia e RGB trefishtë, madhësia 39 00:02:34,190 --> 00:02:39,430 e një pixel vetme, herë numrin e piksele në një rresht, plus mbushje në 40 00:02:39,430 --> 00:02:40,910 në fund të rreshtit. 41 00:02:40,910 --> 00:02:45,200 Dhe pastaj ne do të shumohen se nga vlera absolute e lartësisë tonë për të marrë 42 00:02:45,200 --> 00:02:48,350 numri i përgjithshëm i bytes në të dhënat e imazhit. 43 00:02:48,350 --> 00:02:53,050 bf.bfSize është vetëm numri i përgjithshëm i bytes në të dhënat tona imazhit, kështu 44 00:02:53,050 --> 00:02:56,530 bi.biSizeImage, plus Madhësia e headers tona. 45 00:02:56,530 --> 00:02:59,850 Pra, duke shtuar nga madhësia e skedarit bitmap header, dhe madhësia e info bitmap 46 00:02:59,850 --> 00:03:00,800 header, OK. 47 00:03:00,800 --> 00:03:03,170 Pra, kjo është e gjitha ne kemi nevojë për të ndryshojë në headers tona. 48 00:03:03,170 --> 00:03:07,020 Tani ne do të shkruani skedarit bitmap header të outfile tonë, dhe info tonë bitmap 49 00:03:07,020 --> 00:03:09,880 header për outfile tonë, dhe tani ne jemi gati për të filluar duke shkuar 50 00:03:09,880 --> 00:03:11,990 mbi pixels aktuale. 51 00:03:11,990 --> 00:03:15,720 >> Pra, ne duam të iterate mbi scan linjat e infile-së. 52 00:03:15,720 --> 00:03:17,730 Pra, ne duam të iterate mbi oldheight. 53 00:03:17,730 --> 00:03:20,830 Kjo është arsyeja pse ne kemi nevojë për të kujtuar lartësia origjinal, para se të ndryshuar atë 54 00:03:20,830 --> 00:03:23,040 dhe luspa atë me n. 55 00:03:23,040 --> 00:03:27,810 Tani ne jemi duke shkuar për të lexuar një të vetme rresht i infile në një 56 00:03:27,810 --> 00:03:30,630 buffer të madhësisë oldwidth. 57 00:03:30,630 --> 00:03:36,190 Pra këtu, ne jemi freading Madhësia e RGB trefishtë, e pixel, dhe gjerësia e vjetër e 58 00:03:36,190 --> 00:03:39,760 ata nga infile në tampon tonë. 59 00:03:39,760 --> 00:03:43,480 Dhe kjo do të jetë një të tërë rresht në këtë rrjet. 60 00:03:43,480 --> 00:03:50,390 Deri tani, ne duam të iterate herë n për të printoni këtë rresht për të outfile n herë tonë. 61 00:03:50,390 --> 00:03:52,510 Dhe kështu kjo është ajo që është duke e bërë këtë lak. 62 00:03:52,510 --> 00:03:57,910 Kjo loop brendshme është iterating mbi rresht veten, mbi array, shtypjen 63 00:03:57,910 --> 00:04:00,710 çdo piksel në rrjet n herë. 64 00:04:00,710 --> 00:04:04,510 Pra, elementi 0 është duke u shtypur n herë, elementi i parë është qenit 65 00:04:04,510 --> 00:04:05,660 shtypura herë n. 66 00:04:05,660 --> 00:04:10,820 Dhe kjo është lloj i si ne jemi duke shkuar për horizontalisht shkallë në outfile, dhe 67 00:04:10,820 --> 00:04:13,390 kjo loop, pasi ne jemi duke looping n herë, është se si ne jemi duke shkuar për 68 00:04:13,390 --> 00:04:15,580 shkallë vertikalisht. 69 00:04:15,580 --> 00:04:19,850 >> Poshtë këtu, shohim se ne kemi nevojë për të shtuar mbushje në fund të çdo rresht. 70 00:04:19,850 --> 00:04:25,050 Kjo është arsyeja pse kjo është brenda për lak që është shtypjen nga rreshtat n e vetëm 71 00:04:25,050 --> 00:04:28,400 ky rresht një nga infile. 72 00:04:28,400 --> 00:04:32,150 Pastaj këtu poshtë, unë jam duke shkuar për të kaloni mbi mbushje në infile, që nga një herë 73 00:04:32,150 --> 00:04:34,560 ne jemi duke bërë me një rresht të infile, ne nuk e kujdesit për 74 00:04:34,560 --> 00:04:35,290 çfarë ishte mbushje. 75 00:04:35,290 --> 00:04:37,110 Ne vetëm duam të shkuar në rreshtin e dytë. 76 00:04:37,110 --> 00:04:40,870 Dhe pastaj ne do të loop mbrapa dhe bën të gjitha kjo përsëri për rreshtin e dytë. 77 00:04:40,870 --> 00:04:44,406 >> Së fundi, pasi ne jemi bërë me të gjitha që, ne mund të mbyllë infile, afër 78 00:04:44,406 --> 00:04:47,430 outfile, dhe kthimi 0 sepse ne jemi bërë. 79 00:04:47,430 --> 00:04:50,330 >> Emri im është Rob, dhe kjo ishte resize. 80 00:04:50,330 --> 00:04:54,934 >> [MUSIC Playing]