1 00:00:00,000 --> 00:00:12,240 >> [Redare a muzicii] 2 00:00:12,240 --> 00:00:15,870 >> ROB Bowden: Bună, eu sunt Rob, să încercați acest lucru pe de dimensiune. 3 00:00:15,870 --> 00:00:21,100 Deci, suntem din nou de gând să înceapă cu de fapt o copie a copy.c, și 4 00:00:21,100 --> 00:00:22,860 face câteva modificări. 5 00:00:22,860 --> 00:00:26,280 Notă imediat vom vedea o schimbare, în cazul în care în loc de verificare pentru a vedea dacă 6 00:00:26,280 --> 00:00:30,440 argc nu egal 3, ne-o dorim pentru a verifica dacă argc nu este egal cu 4, deoarece 7 00:00:30,440 --> 00:00:34,350 acum nu doar a lua într-o infile și outfile, dar suntem, de asemenea, luând în 8 00:00:34,350 --> 00:00:38,980 n, care este suma pe care suntem scalarea imaginea originală de. 9 00:00:38,980 --> 00:00:44,340 Odată ce suntem siguri de asta, putem doar conversia n la un număr întreg folosind atoi. 10 00:00:44,340 --> 00:00:48,760 >> Deci, acum vom crea unele pseudonime, suna doar argv 2 infile, și 11 00:00:48,760 --> 00:00:54,240 argv 3 outfile, pentru că argv 2 și argv 3 nu sunt nume de foarte mare ajutor. 12 00:00:54,240 --> 00:00:58,510 Acum vrem să asigurați-vă că n este în limitele ne așteptăm, astfel încât 13 00:00:58,510 --> 00:01:02,910 spec. specifică faptul că, dacă este mai mică sau egală cu zero, sau mai mare de 100, 14 00:01:02,910 --> 00:01:08,580 apoi că este un factor de redimensionare invalid, și noi ar trebui să avertizeze utilizatorul de care. 15 00:01:08,580 --> 00:01:13,090 >> Odată ce suntem dincolo de toate acestea, putem deschide în cele din urmă infile noastră, și avem nevoie de 16 00:01:13,090 --> 00:01:16,270 erorii verificați pentru a vă asigura că deschidere nu a eșuat pentru un motiv oarecare. 17 00:01:16,270 --> 00:01:19,860 De asemenea, avem nevoie pentru a deschide outfile noastră, și din nou eroare verificați pentru a vă asigura că 18 00:01:19,860 --> 00:01:21,250 nu a eșuat pentru un motiv oarecare. 19 00:01:21,250 --> 00:01:26,270 Dar asigurați-vă că în cazul în care deschiderea a outfile nu a reușit de care avem nevoie pentru a închide 20 00:01:26,270 --> 00:01:29,040 infile, care a fost deja deschis. 21 00:01:29,040 --> 00:01:33,690 >> Deci, presupunând că nu reușesc, atunci Suntem - la fel ca în copy.c-- 22 00:01:33,690 --> 00:01:36,140 va citi în antetul din infile. 23 00:01:36,140 --> 00:01:40,130 Vom asigurați-vă că este un valid bitmap, dar acum vom face unele 24 00:01:40,130 --> 00:01:41,620 lucrurile un pic diferit. 25 00:01:41,620 --> 00:01:44,870 Deci, în primul rând, am de gând să doriți să amintiți-vă lățimea și înălțimea inițială 26 00:01:44,870 --> 00:01:48,290 a infile, pentru că vom fie că este vorba schimba pentru outfile. 27 00:01:48,290 --> 00:01:53,890 Deci, acum, amintiți-vă că, din motive ciudate bi.biheight, este negativ, și 28 00:01:53,890 --> 00:01:58,670 astfel încât înălțimea reală, în pozitiv, am doresc să ia valoarea absolută. 29 00:01:58,670 --> 00:02:02,580 >> Acum, padding va fi la fel calcul așa cum a fost în copy.c, 30 00:02:02,580 --> 00:02:06,060 folosind lățimea vechi, iar acum suntem de fapt se va schimba 31 00:02:06,060 --> 00:02:07,320 ceea ce este în antet nostru. 32 00:02:07,320 --> 00:02:11,200 Așa că am de gând să se multiplice lățime nostru de n, din moment ce suntem scalarea lățimea de 33 00:02:11,200 --> 00:02:15,100 n, înmulțiți înălțimea de n, deoarece suntem scalarea de n, iar acum ne-am 34 00:02:15,100 --> 00:02:19,250 calcul pentru o nouă umplutură bazat pe noul lățimea. 35 00:02:19,250 --> 00:02:21,840 >> Deci, acum avem nevoie pentru a schimba unele alte domenii în antet nostru. 36 00:02:21,840 --> 00:02:26,890 Bi.biSizeImage se presupune a fi Dimensiunea reprezintă toți octeții din pixelii 37 00:02:26,890 --> 00:02:28,520 și padding imaginii. 38 00:02:28,520 --> 00:02:34,190 Și astfel dimensiunea de un singur rând de nostru imagine este marimea RGB triplu, dimensiunea 39 00:02:34,190 --> 00:02:39,430 de un singur pixel, ori numărul de pixeli într-un rând, plus padding la 40 00:02:39,430 --> 00:02:40,910 sfârșitul rândului. 41 00:02:40,910 --> 00:02:45,200 Și apoi vom multiplica că, prin valoare absolută de înălțime nostru pentru a primi 42 00:02:45,200 --> 00:02:48,350 numărul total de octeți în datele de imagine. 43 00:02:48,350 --> 00:02:53,050 bf.bfSize este doar numărul total de bytes din datele noastre de imagine, așa 44 00:02:53,050 --> 00:02:56,530 bi.biSizeImage, plus Dimensiunea de antete noastre. 45 00:02:56,530 --> 00:02:59,850 Deci, adăugarea de dimensiunea fișierului bitmap antet, și dimensiunea de informații bitmap 46 00:02:59,850 --> 00:03:00,800 antet, OK. 47 00:03:00,800 --> 00:03:03,170 Deci, asta e tot ce avem nevoie pentru a schimba în anteturile noastre. 48 00:03:03,170 --> 00:03:07,020 Acum vom scrie antetul fișierului bitmap la outfile noastră, și info nostru bitmap 49 00:03:07,020 --> 00:03:09,880 header la outfile noastră, și acum suntem gata pentru a începe a merge 50 00:03:09,880 --> 00:03:11,990 peste pixelii reale. 51 00:03:11,990 --> 00:03:15,720 >> Așa că vrem să itera peste linii de scanare INFILE lui. 52 00:03:15,720 --> 00:03:17,730 Așa că vrem să itera peste oldheight. 53 00:03:17,730 --> 00:03:20,830 Acesta este motivul pentru care trebuie să-și amintească Înălțimea inițială, înainte de a ne schimba 54 00:03:20,830 --> 00:03:23,040 și-l scalate de n. 55 00:03:23,040 --> 00:03:27,810 Acum am de gând să citesc un singur rând de infile într-un 56 00:03:27,810 --> 00:03:30,630 tampon de dimensiuni oldwidth. 57 00:03:30,630 --> 00:03:36,190 Dimensiunea Deci, aici, suntem freading de RGB triplu, un pixel, și lățimea vechi de 58 00:03:36,190 --> 00:03:39,760 le din infile în tampon nostru. 59 00:03:39,760 --> 00:03:43,480 Și că va fi un întreg rând în această matrice. 60 00:03:43,480 --> 00:03:50,390 Deci, acum, vrem să repeta de n ori la imprima acest rând la outfile nostru de n ori. 61 00:03:50,390 --> 00:03:52,510 Și așa că e ceea ce această buclă este de a face. 62 00:03:52,510 --> 00:03:57,910 Această buclă interioară este iterarea peste rând în sine, pe matrice, tipărirea 63 00:03:57,910 --> 00:04:00,710 fiecare pixel din matrice de n ori. 64 00:04:00,710 --> 00:04:04,510 Astfel încât elementul de grad zero se imprimă n ori, primul element este în curs 65 00:04:04,510 --> 00:04:05,660 imprimate de n ori. 66 00:04:05,660 --> 00:04:10,820 Și care este un fel de modul în care vom scară orizontală în outfile, și 67 00:04:10,820 --> 00:04:13,390 această buclă, din moment ce suntem looping n ori, este modul în care vom 68 00:04:13,390 --> 00:04:15,580 scară vertical. 69 00:04:15,580 --> 00:04:19,850 >> Pe aici, vedem că avem nevoie pentru a adăuga padding la sfârșitul fiecărui rând. 70 00:04:19,850 --> 00:04:25,050 De aceea, aceasta este în interiorul pentru bucla care se imprimă în cele n rânduri de doar 71 00:04:25,050 --> 00:04:28,400 acesta rând din infile. 72 00:04:28,400 --> 00:04:32,150 Apoi jos aici, am de gând să săriți peste padding în infile, deoarece o dată 73 00:04:32,150 --> 00:04:34,560 am terminat cu un singur rând de infile, nu ne pasă de 74 00:04:34,560 --> 00:04:35,290 ceea ce a fost padding. 75 00:04:35,290 --> 00:04:37,110 Vrem doar să ajungem la al doilea rând. 76 00:04:37,110 --> 00:04:40,870 Și apoi vom buclă înapoi și de a face tot aceasta din nou pentru al doilea rând. 77 00:04:40,870 --> 00:04:44,406 >> În cele din urmă, odată ce am terminat cu toate astea, putem închide infile, aproape 78 00:04:44,406 --> 00:04:47,430 outfile, și revenirea 0 pentru că am terminat. 79 00:04:47,430 --> 00:04:50,330 >> Numele meu este Rob, iar acest lucru a fost de redimensionare. 80 00:04:50,330 --> 00:04:54,934 >> [Redare a muzicii]