1 00:00:00,000 --> 00:00:00,996 2 00:00:00,996 --> 00:00:12,470 >> [Glazba svira] 3 00:00:12,470 --> 00:00:13,210 >> ROB Bowden: Bok. 4 00:00:13,210 --> 00:00:16,870 Ja sam Rob i neka je veličina do ovog problema. 5 00:00:16,870 --> 00:00:20,990 Tako ćemo početi s copy.c kao Predložak, ali mi ćemo biti 6 00:00:20,990 --> 00:00:23,340 stvaranje vrlo malo promjena. 7 00:00:23,340 --> 00:00:27,570 >> Sada vidimo da se odmah praviš promijeniti u kojem više ne provjeravamo 8 00:00:27,570 --> 00:00:31,560 za naš rxc ne jednaka 3, ali sada Provjeravamo rc ne jednaka 4. 9 00:00:31,560 --> 00:00:34,670 Budući da smo također žele uključiti u dopunom u datoteku i iz datoteke 10 00:00:34,670 --> 00:00:39,550 Argumenti, f koja će biti to faktor kojim si mi skaliranje. 11 00:00:39,550 --> 00:00:45,430 >> Dakle, nakon što smo sigurni u to, želimo koristiti s skeniranje f pretvoriti string 12 00:00:45,430 --> 00:00:49,030 argv1 na plovak. 13 00:00:49,030 --> 00:00:51,330 I mi ćemo se spremiti da faktor. 14 00:00:51,330 --> 00:00:55,180 Ovaj dodatni lik pazeći da mi se zapravo ne ulazi 15 00:00:55,180 --> 00:00:59,200 nešto poput 1,4 ABC na zapovjednoj liniji. 16 00:00:59,200 --> 00:01:02,960 >> Sada ćemo stvoriti neke pseudonime budući RV2 i RV3 nisu 17 00:01:02,960 --> 00:01:04,310 vrlo korisne imena. 18 00:01:04,310 --> 00:01:07,660 Mi smo, umjesto toga, ide na poziv ih u datoteku i iz datoteke. 19 00:01:07,660 --> 00:01:11,580 Sada ćemo biti sigurni da Naš faktor je zapravo vrijede. 20 00:01:11,580 --> 00:01:16,330 Dakle, ako je faktor manji od ili jednak nula ili veće od 100, a zatim po 21 00:01:16,330 --> 00:01:19,660 spec., trebamo odbaciti taj faktor. 22 00:01:19,660 --> 00:01:23,890 >> Kad smo se uvjerili da je dobro, sad možemo otvoriti n datoteku, i moramo napraviti 23 00:01:23,890 --> 00:01:25,950 sigurni da je uspješno otvorila. 24 00:01:25,950 --> 00:01:28,630 Ako to nije učinio, da će se vratiti null. 25 00:01:28,630 --> 00:01:30,390 Mi ćemo otvoriti out datoteku. 26 00:01:30,390 --> 00:01:33,420 I opet, želimo provjeriti kako bi sigurni da uspješno je otvorila. 27 00:01:33,420 --> 00:01:37,270 A ako to nije uspješno otvorili, a zatim moramo biti sigurni da zatvorite 28 00:01:37,270 --> 00:01:40,870 n sliku koja je izvorno uspješno otvoren, inače imamo 29 00:01:40,870 --> 00:01:42,600 otjecanje memorije. 30 00:01:42,600 --> 00:01:46,350 >> Pa sad idemo čitati u bitmap file header i bitmap info 31 00:01:46,350 --> 00:01:48,890 header od n datoteku. 32 00:01:48,890 --> 00:01:52,360 Mi ćemo osigurati da n datoteka bila valjana bitmap. 33 00:01:52,360 --> 00:01:52,640 OK. 34 00:01:52,640 --> 00:01:55,100 >> Pa sad idemo na početak stvaranje neke promjene. 35 00:01:55,100 --> 00:01:58,840 Pa zato što smo ide da se mijenja stvari, prvo želim sjetiti 36 00:01:58,840 --> 00:02:01,510 stari širina n datoteke. 37 00:02:01,510 --> 00:02:05,160 Mi želimo sjetiti starih punjenje od n datoteka koristeći isti izračun 38 00:02:05,160 --> 00:02:06,990 iz copy.c. 39 00:02:06,990 --> 00:02:09,840 >> A sad idemo mijenjati bitmap info header. 40 00:02:09,840 --> 00:02:13,630 I tako smo se množenjem oba širinu i visina faktorom od 41 00:02:13,630 --> 00:02:15,750 to je ono što smo skaliranje strane. 42 00:02:15,750 --> 00:02:18,420 Idemo utvrditi Novi padding datoteke po 43 00:02:18,420 --> 00:02:21,140 koristeći novu širinu. 44 00:02:21,140 --> 00:02:27,330 I mi ćemo utvrditi novi Veličina slike pomoću broja 45 00:02:27,330 --> 00:02:31,610 bajtova u jednom retku koji će se se broj piksela u tom retku 46 00:02:31,610 --> 00:02:35,960 puta veći od piksela plus Broj bajtova padding na kraju 47 00:02:35,960 --> 00:02:40,310 tog reda, i pomnoži sve to po broju redova koje imamo. 48 00:02:40,310 --> 00:02:43,800 Tako da je broj bajtova imamo u našim slikovnih podataka. 49 00:02:43,800 --> 00:02:48,190 >> Bf.Bfsize sada će biti broj bajtova u našem slike beta plus 50 00:02:48,190 --> 00:02:49,350 veličina našeg zaglavlja. 51 00:02:49,350 --> 00:02:53,910 Dakle plus veličina zaglavlja bitmap datoteke i veličinu bitmap info napadača. 52 00:02:53,910 --> 00:02:54,510 OK. 53 00:02:54,510 --> 00:02:56,440 Tako da je to za naše zaglavlja. 54 00:02:56,440 --> 00:02:59,030 Možemo pisati glavu datoteka i Informacije header našem out 55 00:02:59,030 --> 00:03:01,590 podnijeti, a mi smo dobri. 56 00:03:01,590 --> 00:03:03,800 >> Sada je vrijeme da počnete zapravo pisanje piksel 57 00:03:03,800 --> 00:03:05,120 Podaci na van datoteku. 58 00:03:05,120 --> 00:03:10,460 Mi ćemo proglasiti tampon veličine Stari širina RGB trojke, a mi smo 59 00:03:10,460 --> 00:03:13,790 će proglasiti varijablu otupio red, što je idemo 60 00:03:13,790 --> 00:03:15,640 u početku postavili jednak negativnom 1. 61 00:03:15,640 --> 00:03:19,090 Vidjet ćemo kako ćemo se pomoću da bi se pratiti što 62 00:03:19,090 --> 00:03:22,640 red Trenutno imamo učitava u ovoj tampon. 63 00:03:22,640 --> 00:03:23,290 OK. 64 00:03:23,290 --> 00:03:28,750 >> Tako sada za razliku od standardnog izdanja, umjesto iterating nad na in 65 00:03:28,750 --> 00:03:32,900 file, idemo ponoviti tijekom svake redak u datoteci van i shvatiti 66 00:03:32,900 --> 00:03:38,130 koji redak u datoteci u želimo stavite se u ovom retku u datoteci van. 67 00:03:38,130 --> 00:03:44,930 Dakle iterating preko svih redova u out file pomoću nove visine, mi smo prvi 68 00:03:44,930 --> 00:03:48,890 će odrediti red u stara podnijeti ćemo koristiti, koje smo 69 00:03:48,890 --> 00:03:53,560 će učiniti tako da ovu struju red podijeljena faktor. 70 00:03:53,560 --> 00:03:58,000 Tako da će nam dati redak u starom datoteke koje želimo. 71 00:03:58,000 --> 00:04:03,310 >> Pa sad, ako otupio red nije jednako stari y, ćemo morati pročitati redak 72 00:04:03,310 --> 00:04:05,940 da želimo u našoj monete tampon red. 73 00:04:05,940 --> 00:04:07,700 Pa kako ćemo to učiniti? 74 00:04:07,700 --> 00:04:11,650 Prvo, mi ćemo shvatiti položaj koji počinje taj red u 75 00:04:11,650 --> 00:04:13,100 Izvorna datoteka. 76 00:04:13,100 --> 00:04:18,630 Tako je kako je pozicija će biti prošlost sve naše zaglavlja i 77 00:04:18,630 --> 00:04:21,589 Sada posljednjih stare y redaka. 78 00:04:21,589 --> 00:04:23,880 >> I tako koliko je bajtova u jednom redu? 79 00:04:23,880 --> 00:04:28,740 Opet, veličine RGB triple puta stara Širina plus stara padding, tako da je 80 00:04:28,740 --> 00:04:30,640 broj bajtova u jednom retku. 81 00:04:30,640 --> 00:04:33,680 I želimo preskočiti prošlosti stare y redaka. 82 00:04:33,680 --> 00:04:37,580 Tako ćemo f traže, a mi smo pomoću traže set početi od 83 00:04:37,580 --> 00:04:39,100 početku datoteke. 84 00:04:39,100 --> 00:04:42,740 Idemo u f nastojati tom položaju u spisu, stavljajući nas na 85 00:04:42,740 --> 00:04:46,500 s početkom u redu želimo čitati u našoj tampon. 86 00:04:46,500 --> 00:04:48,510 >> Mi ćemo postaviti red otupio jednak starom y. 87 00:04:48,510 --> 00:04:53,080 Pa sad, ako se povratna petlja i želimo taj isti red u naše iz datoteke, 88 00:04:53,080 --> 00:04:55,970 onda nećemo čitati je ponovno nepotrebno. 89 00:04:55,970 --> 00:04:59,310 Pa stvarno, otupio je red Samo optimizacije. 90 00:04:59,310 --> 00:05:05,500 >> Konačno, idemo čitati u Trenutna red stara širina RGB trojke 91 00:05:05,500 --> 00:05:08,040 da želimo iz izvorne datoteke. 92 00:05:08,040 --> 00:05:12,270 Pa sad sad red sadrži piksele od Izvorna datoteka koje želimo 93 00:05:12,270 --> 00:05:14,200 pisati u out datoteku. 94 00:05:14,200 --> 00:05:18,960 Tako sada, baš kao i prije, umjesto iterating preko stare datoteke, trebamo 95 00:05:18,960 --> 00:05:22,560 to ponoviti preko novih datoteka redovima. 96 00:05:22,560 --> 00:05:27,450 Pa ovdje, umjesto da iterating preko svega od starih piksela koji je u monete redom, 97 00:05:27,450 --> 00:05:31,210 želimo ponoviti tijekom sve piksela u našoj novoj datoteci u to 98 00:05:31,210 --> 00:05:32,480 Posebno red. 99 00:05:32,480 --> 00:05:34,140 >> Zašto želimo to učiniti? 100 00:05:34,140 --> 00:05:38,960 Jer ovdje vidimo da nismo zapravo nužno koristiti sve 101 00:05:38,960 --> 00:05:41,020 piksela u izvornoj datoteci. 102 00:05:41,020 --> 00:05:46,630 Jer ako smo se smanjuje, što bi moglo zapravo žele preskočiti piksela. 103 00:05:46,630 --> 00:05:48,090 A vidimo da je to - 104 00:05:48,090 --> 00:05:49,690 x podijeljena faktor - 105 00:05:49,690 --> 00:05:55,620 usko ogledala do ovdje gdje smo rekli y podijeljena faktor shvatiti da 106 00:05:55,620 --> 00:06:02,480 stara y-og reda odgovara y-og reda u ovoj novoj datoteci. 107 00:06:02,480 --> 00:06:05,880 >> Sada ćemo napisati sve ove piksela od starog redu 108 00:06:05,880 --> 00:06:07,440 u našem novom redu. 109 00:06:07,440 --> 00:06:10,890 Nakon što smo to učinili, moramo samo staviti padding na kraju našeg reda 110 00:06:10,890 --> 00:06:15,540 A mi ćemo petlju leđa i nastaviti sve od reda u našoj novoj datoteci. 111 00:06:15,540 --> 00:06:19,390 Na kraju, moramo zatvoriti naš stari podnijeti, zatvoriti našu novu datoteku, i povratak 112 00:06:19,390 --> 00:06:21,540 nuli, jer sve je u redu. 113 00:06:21,540 --> 00:06:24,220 >> Moje ime je Rob i to je pauza. 114 00:06:24,220 --> 00:06:29,184 >> [Glazba svira]