1 00:00:00,000 --> 00:00:00,996 2 00:00:00,996 --> 00:00:12,470 >> [Redare a muzicii] 3 00:00:12,470 --> 00:00:13,210 >> ROB BOWDEN: Hi. 4 00:00:13,210 --> 00:00:16,870 Sunt Rob și să marimea lui această problemă. 5 00:00:16,870 --> 00:00:20,990 Așa că am de gând să înceapă cu copy.c ca un șablon, dar vom fi 6 00:00:20,990 --> 00:00:23,340 a face destul de câteva modificări. 7 00:00:23,340 --> 00:00:27,570 >> Acum vom vedea facem imediat un schimba în cazul în care suntem nu mai verificare 8 00:00:27,570 --> 00:00:31,560 pentru RXC noastră nu egal cu 3, dar acum suntem verificarea rc nu este egal 4. 9 00:00:31,560 --> 00:00:34,670 Din moment ce ne-am dori, de asemenea, să includă, în afară de la dosar și din fișierele 10 00:00:34,670 --> 00:00:39,550 argumente, f, care va fi aceasta factor de care suntem de scalare. 11 00:00:39,550 --> 00:00:45,430 >> Deci, odată ce suntem siguri de asta, vrem să folosi s scanare f pentru a converti șirul 12 00:00:45,430 --> 00:00:49,030 argv1 la un float. 13 00:00:49,030 --> 00:00:51,330 Și vom stoca că în factor. 14 00:00:51,330 --> 00:00:55,180 Acest caracter suplimentar este de a face sigur care nu sunt de fapt intra 15 00:00:55,180 --> 00:00:59,200 ceva de genul 1.4 ABC la linia de comandă. 16 00:00:59,200 --> 00:01:02,960 >> Acum vom crea niște pseudonime din RV2 și RV3 nu sunt 17 00:01:02,960 --> 00:01:04,310 nume de foarte mare ajutor. 18 00:01:04,310 --> 00:01:07,660 Suntem, în schimb, va suna le în dosar și în afară de fișiere. 19 00:01:07,660 --> 00:01:11,580 Acum am de gând să vă asigurați că Factorul nostru a fost de fapt validă. 20 00:01:11,580 --> 00:01:16,330 Deci, dacă factorul este mai mic sau egal cu zero sau mai mare de 100, atunci conform 21 00:01:16,330 --> 00:01:19,660 spec., trebuie să respingem acest factor. 22 00:01:19,660 --> 00:01:23,890 >> Când suntem siguri că e bine, acum putem deschide fișierul n, și avem de a face 23 00:01:23,890 --> 00:01:25,950 vă că acesta a fost deschis cu succes. 24 00:01:25,950 --> 00:01:28,630 În cazul în care nu a făcut, că se va întoarce null. 25 00:01:28,630 --> 00:01:30,390 Vom deschide fișierul afară. 26 00:01:30,390 --> 00:01:33,420 Și din nou, vrem să verificați pentru a vă vă că este deschis cu succes. 27 00:01:33,420 --> 00:01:37,270 Și dacă aceasta nu a deschis cu succes, atunci avem nevoie, de asemenea, pentru a fi sigur pentru a închide 28 00:01:37,270 --> 00:01:40,870 fișierul n care inițial cu succes deschis, sau altfel avem o 29 00:01:40,870 --> 00:01:42,600 scurgere de memorie. 30 00:01:42,600 --> 00:01:46,350 >> Deci, acum vom citi în bitmap antet fișier și informații bitmap 31 00:01:46,350 --> 00:01:48,890 antet de la dosar nr. 32 00:01:48,890 --> 00:01:52,360 Mergem să ne asigurăm că n dosar a fost un bitmap valabil. 33 00:01:52,360 --> 00:01:52,640 OK. 34 00:01:52,640 --> 00:01:55,100 >> Deci, acum vom începe face unele modificări. 35 00:01:55,100 --> 00:01:58,840 Așa că am de gând să se schimbe lucrurile, dorim în primul rând să-și amintească 36 00:01:58,840 --> 00:02:01,510 lățime vechi din dosarul nr. 37 00:02:01,510 --> 00:02:05,160 Vrem să ne amintim padding vechi de fișierul n folosind aceeași calcul 38 00:02:05,160 --> 00:02:06,990 din copy.c. 39 00:02:06,990 --> 00:02:09,840 >> Și acum am de gând să schimbe info bitmap antetul. 40 00:02:09,840 --> 00:02:13,630 Și așa suntem înmulțirea atât lățimea și înălțimea de factorul deoarece 41 00:02:13,630 --> 00:02:15,750 asta e ceea ce suntem de scalare. 42 00:02:15,750 --> 00:02:18,420 Mergem pentru a determina nou padding a dosarului de 43 00:02:18,420 --> 00:02:21,140 folosind noua lățimea. 44 00:02:21,140 --> 00:02:27,330 Și vom stabili noi dimensiune a imaginii folosind numărul de 45 00:02:27,330 --> 00:02:31,610 octeți într-un singur rând care urmează să fie numărul de pixeli din acel rând 46 00:02:31,610 --> 00:02:35,960 ori de marimea unui pixel plus Numărul de octeți de umplutură, la sfârșitul 47 00:02:35,960 --> 00:02:40,310 de care rând, și înmulțirea toate că de numărul de rânduri pe care le avem. 48 00:02:40,310 --> 00:02:43,800 Deci, asta e numarul de bytes avem în datele noastre de imagine. 49 00:02:43,800 --> 00:02:48,190 >> Bf.Bfsize acum va fi numărul de de bytes în imaginea noastră beta plus 50 00:02:48,190 --> 00:02:49,350 dimensiunea de antete noastre. 51 00:02:49,350 --> 00:02:53,910 Dimensiunea astfel plus de antet fișier bitmap și dimensiunea de informații antet bitmap. 52 00:02:53,910 --> 00:02:54,510 OK. 53 00:02:54,510 --> 00:02:56,440 Deci asta este pentru antete noastre. 54 00:02:56,440 --> 00:02:59,030 Putem scrie capul de fișiere și info antet de la noastră 55 00:02:59,030 --> 00:03:01,590 dosar, iar noi suntem bine. 56 00:03:01,590 --> 00:03:03,800 >> Acum este timpul pentru a începe de fapt scris pixel 57 00:03:03,800 --> 00:03:05,120 date în dosarul de afară. 58 00:03:05,120 --> 00:03:10,460 Vom declara un tampon de dimensiune vechi lățime RGB triplează, iar noi suntem 59 00:03:10,460 --> 00:03:13,790 O să declare o variabilă numită amortit rând, care este vom 60 00:03:13,790 --> 00:03:15,640 inițial egală cu negativ 1. 61 00:03:15,640 --> 00:03:19,090 Vom vedea că am de gând să fie utilizând că, în scopul de a urmări ceea ce 62 00:03:19,090 --> 00:03:22,640 rând am în prezent s-au încărcat în acest tampon. 63 00:03:22,640 --> 00:03:23,290 OK. 64 00:03:23,290 --> 00:03:28,750 >> Deci, acum, spre deosebire de ediția standard de, în loc de iterarea peste cel în 65 00:03:28,750 --> 00:03:32,900 fișier, vom repeta pe fiecare rând în fișierul de ieșire și dau seama 66 00:03:32,900 --> 00:03:38,130 care rând în fișierul în dorim să loc în acest rând în fișierul afară. 67 00:03:38,130 --> 00:03:44,930 Astfel iterarea peste toate rândurile în out fișier folosind noul înălțime, suntem în primul rând 68 00:03:44,930 --> 00:03:48,890 merge pentru a determina rândul în vechea fișier vom folosi, pe care suntem 69 00:03:48,890 --> 00:03:53,560 de gând să facă acest lucru prin luarea de curent rând împărțit de factor. 70 00:03:53,560 --> 00:03:58,000 Așa că o să ne dea rândul în fișierul vechi pe care ne-o dorim. 71 00:03:58,000 --> 00:04:03,310 >> Deci, acum, dacă nu rând amortit si nu egal vechi, am de gând să trebuie să citească rândul 72 00:04:03,310 --> 00:04:05,940 pe care ne-o dorim în tampon nostru rând actuală. 73 00:04:05,940 --> 00:04:07,700 Deci, cum vom face asta? 74 00:04:07,700 --> 00:04:11,650 În primul rând, am de gând să dau seama de poziție care începe acel rând în 75 00:04:11,650 --> 00:04:13,100 fișierul original. 76 00:04:13,100 --> 00:04:18,630 Astfel că poziția va fi trecut toate anteturile noastre și 77 00:04:18,630 --> 00:04:21,589 vechi rânduri y acum trecute. 78 00:04:21,589 --> 00:04:23,880 >> Și astfel cât de multe bytes sunt într-un singur rând? 79 00:04:23,880 --> 00:04:28,740 Din nou, dimensiunea de RGB ori triple vechi lățime plus padding vechi, astfel încât este 80 00:04:28,740 --> 00:04:30,640 numărul de octeți de pe un singur rând. 81 00:04:30,640 --> 00:04:33,680 Și vrem să săriți peste vechi rânduri y trecute. 82 00:04:33,680 --> 00:04:37,580 Așa că am de gând să f caute și suntem folosind caută setat pentru a porni de la 83 00:04:37,580 --> 00:04:39,100 începutul unui fișier. 84 00:04:39,100 --> 00:04:42,740 Vom f caute la această poziție în dosar, pune-ne la 85 00:04:42,740 --> 00:04:46,500 începând din rândul ne-o dorim pentru a citi în tampon nostru. 86 00:04:46,500 --> 00:04:48,510 >> Vom stabili rând amortit egal cu vechi y. 87 00:04:48,510 --> 00:04:53,080 Deci, acum, dacă ne-am bucla înapoi și vrem să pentru aceeași linie în fișierul nostru afară, 88 00:04:53,080 --> 00:04:55,970 atunci noi nu vom citi l din nou în mod inutil. 89 00:04:55,970 --> 00:04:59,310 Deci, într-adevăr, rând este amortit doar o optimizare. 90 00:04:59,310 --> 00:05:05,500 >> În cele din urmă, vom citi în rândul curent vechi lățime RGB triplează 91 00:05:05,500 --> 00:05:08,040 pe care ne-o dorim de la fișierul original. 92 00:05:08,040 --> 00:05:12,270 Deci, acum rândul actuală conține pixeli de la fișierul original pe care dorim să 93 00:05:12,270 --> 00:05:14,200 scrie în fișierul afară. 94 00:05:14,200 --> 00:05:18,960 Deci, acum, la fel ca mai sus, în loc de iterarea peste fișierul vechi, avem nevoie de 95 00:05:18,960 --> 00:05:22,560 aceasta pentru a itera peste noi fișiere rânduri. 96 00:05:22,560 --> 00:05:27,450 Ei bine, aici, în loc de iterarea peste tot de vechi pixelii care în rând actuală, 97 00:05:27,450 --> 00:05:31,210 ne-o dorim pentru a itera peste tot a pixeli în noua dosar în acest 98 00:05:31,210 --> 00:05:32,480 particular rând. 99 00:05:32,480 --> 00:05:34,140 >> De ce vrem să facem asta? 100 00:05:34,140 --> 00:05:38,960 Pentru că vedem aici că noi nu suntem de fapt, în mod obligatoriu, folosind toate 101 00:05:38,960 --> 00:05:41,020 pixeli în fișierul original. 102 00:05:41,020 --> 00:05:46,630 Pentru că dacă suntem în scădere, am putea de fapt, doriți să săriți peste pixeli. 103 00:05:46,630 --> 00:05:48,090 Și vom vedea că acest lucru - 104 00:05:48,090 --> 00:05:49,690 x împărțit la factorul - 105 00:05:49,690 --> 00:05:55,620 oglinzi atent aici, unde ne spune y împărțit de factor să dau seama că 106 00:05:55,620 --> 00:06:02,480 rândul y-lea vechi corespunde rândul-y-lea în acest nou dosar. 107 00:06:02,480 --> 00:06:05,880 >> Acum am de gând să scrie toate aceste pixeli din rândul vechi 108 00:06:05,880 --> 00:06:07,440 în noua noastră linie. 109 00:06:07,440 --> 00:06:10,890 După ce am făcut asta, avem nevoie de doar pune umplutura la sfârșitul rândul nostru 110 00:06:10,890 --> 00:06:15,540 și ne vom buclă înapoi și să continue pentru toate rândurile din noul nostru dosar. 111 00:06:15,540 --> 00:06:19,390 La sfârșitul anului, avem nevoie pentru a închide vechiul nostru fișier, închideți noul nostru dosar, și retur 112 00:06:19,390 --> 00:06:21,540 zero, pentru că totul a mers bine. 113 00:06:21,540 --> 00:06:24,220 >> Numele meu este Rob și acest lucru a fost Recess. 114 00:06:24,220 --> 00:06:29,184 >> [Redare a muzicii]