1 00:00:00,000 --> 00:00:02,700 [Powered by Google Translate] [Kiirtutvustus - Ülesanded 4] 2 00:00:02,700 --> 00:00:05,000 [Zamyla Chan - Harvardi Ülikool] 3 00:00:05,000 --> 00:00:07,340 [See on CS50. - CS50.TV] 4 00:00:08,210 --> 00:00:11,670 Hea küll. Tere kõigile ja tere tulemast kiirtutvustus 4. 5 00:00:11,670 --> 00:00:14,270 >> Täna on meie pset on kohtumeditsiini. 6 00:00:14,270 --> 00:00:18,080 Kriminalistid on tõesti lõbus pset et käsitleb tegevusi bitmap faili 7 00:00:18,080 --> 00:00:21,550 avastada toime pannud kuriteo. 8 00:00:21,550 --> 00:00:24,200 Siis läheme suurust mõned bitmap faili, 9 00:00:24,200 --> 00:00:27,780 siis me ka kavatsete toime tulla tõesti lõbus osa nimetatakse taastamine, 10 00:00:27,780 --> 00:00:31,160 kus me põhiliselt andis mälukaart 11 00:00:31,160 --> 00:00:34,350 kus keegi on kogemata kustutatud kõik oma failid, 12 00:00:34,350 --> 00:00:38,860 ja me palus taastada neid faile. 13 00:00:38,860 --> 00:00:42,910 >> Aga kõigepealt, enne kui me sattuda pset, ma tõesti tahan õnnitleda kõiki. 14 00:00:42,910 --> 00:00:45,230 Oleme umbes keskpunktis seda muidugi. 15 00:00:45,230 --> 00:00:50,070 Viktoriin 0 on möödas, ja me oleme pset4, nii sisuliselt, et me oleme poolel teel. 16 00:00:50,070 --> 00:00:55,490 Me oleme tulnud pika tee, kui sa vaatad tagasi oma psets, pset0 ja pset1, 17 00:00:55,490 --> 00:00:57,300 nii õnnitleda ennast selle pärast, 18 00:00:57,300 --> 00:01:00,760 ja me ei kavatse sattuda mõned väga lõbusaid asju. 19 00:01:00,760 --> 00:01:07,070 >> Nii et meie tööriistakasti selle pset jällegi selle asemel sudo yum-y update, 20 00:01:07,070 --> 00:01:13,890 suudame lihtsalt joosta update50 kui sa oled versioon 17,3 ja üle selle seadme kasutusiga. 21 00:01:13,890 --> 00:01:17,380 Nii et kindlasti joosta update50 - see on palju lihtsam, mõned vähem tähemärki - 22 00:01:17,380 --> 00:01:20,640 veenduda, et sa oled viimane versioon aparaat. 23 00:01:20,640 --> 00:01:25,410 Eriti on oluline update50 kui hakkame kasutades CS50 Kontrolli. 24 00:01:25,410 --> 00:01:28,700 Seega veenduge, et teil seda teha. 25 00:01:28,700 --> 00:01:30,760 >> Kõigil sektsioonid see pset, 26 00:01:30,760 --> 00:01:34,350 me hakkame tegelema faili sisendid ja väljundid, esitama I / O. 27 00:01:34,350 --> 00:01:38,140 Me läheme minema üle palju programme, et tegeleda massiivid 28 00:01:38,140 --> 00:01:40,350 osutades faile ja asju, 29 00:01:40,350 --> 00:01:43,050 nii et me tahame veenduda, et me oleme tõesti tuttav ja mugav 30 00:01:43,050 --> 00:01:47,990 tegelevad, kuidas sisend ja väljund failidesse. 31 00:01:47,990 --> 00:01:52,080 >> Turustamise kood see pset on fail nimega copy.c, 32 00:01:52,080 --> 00:01:55,280 ja see, mida me leiame saab olema tõesti kasulik meile 33 00:01:55,280 --> 00:02:00,340 sest me ei kavatse lõpuks tegelikult kopeerimine copy.c fail 34 00:02:00,340 --> 00:02:05,350 ja lihtsalt muuta see veidi, et oleks võimalik saavutada esimese 2 osa lahendamist. 35 00:02:05,350 --> 00:02:09,030 >> Ja nii siis nagu juba mainisin, on tegemist rasterpildid samuti JPEG. 36 00:02:09,030 --> 00:02:13,170 Nii et tõesti mõista struktuuri, kuidas need failid on korraldatud, 37 00:02:13,170 --> 00:02:16,170 kuidas me saame tõesti tõlkida 0. ja 1s arvesse structs 38 00:02:16,170 --> 00:02:19,040 ja asju, mida me tegelikult saame mõista ja tõlgendada ja muuta, 39 00:02:19,040 --> 00:02:21,000 mis on tõesti oluline, 40 00:02:21,000 --> 00:02:25,970 nii laskumist JPEG ja bitmap failide ja mõistmine struktuuri need. 41 00:02:25,970 --> 00:02:30,780 >> Pset4, nagu tavaliselt, algab sektsiooni küsimusi. 42 00:02:30,780 --> 00:02:36,600 Need hakkab tegelema faili I / O ja sulle harjunud, et. 43 00:02:36,600 --> 00:02:42,520 Siis 1. osa Dekkari, kus te olete antud bitmap faili 44 00:02:42,520 --> 00:02:45,630 , mis näeb välja selline nagu punased täpid üle kogu. 45 00:02:45,630 --> 00:02:52,180 Ja siis põhimõtteliselt mida me kavatseme teha, on võtta seda faili ja lihtsalt muuta pisut 46 00:02:52,180 --> 00:02:54,010 võetud versioon, et me saame lugeda. 47 00:02:54,010 --> 00:02:56,000 Sisuliselt, kui me lõpetame, me peame sama faili, 48 00:02:56,000 --> 00:03:02,630 välja arvatud me näe varjatud sõnum peidus kõik need punased täpid. 49 00:03:02,630 --> 00:03:07,310 Siis Resize on programm, mis antud faili 50 00:03:07,310 --> 00:03:11,490 ja siis antud faili nimi, mis on väljundiks ja siis antud arv samuti, 51 00:03:11,490 --> 00:03:16,850 tegelikult selle suurust muuta bitmap selle täisarvuni. 52 00:03:16,850 --> 00:03:19,240 Siis lõpuks, meil on taastada pset. 53 00:03:19,240 --> 00:03:24,160 Meile antakse mälukaardile ja siis peavad tagasi nõudma kõik fotod 54 00:03:24,160 --> 00:03:25,920 mis on kogemata kustutatud, 55 00:03:25,920 --> 00:03:31,420 kuid, nagu me õpime, tegelikult ei kustutata ja toimikust kõrvaldada; 56 00:03:31,420 --> 00:03:38,470 me lihtsalt selline kadunud, kus nad olid toimikusse, kuid me ei kavatse taastada seda. 57 00:03:38,470 --> 00:03:44,950 >> Suur. Nii laskumist faili I / O Täpsemalt on need terve nimekirja ülesandeid, mis teid kasutades. 58 00:03:44,950 --> 00:03:49,840 Olete juba näinud natuke põhitõdesid fopen, fread ja ümbernimetamisel nimega, 59 00:03:49,840 --> 00:03:54,350 kuid me ei kavatse sügavamalt uurida mõnda faili I / O funktsioone nagu fputc, 60 00:03:54,350 --> 00:03:56,930 kus te lihtsalt kirjutada üks täht korraga, 61 00:03:56,930 --> 00:04:02,000 kuni fseek, kus sa sellist faili teisaldada asendinäit edasi ja tagasi, 62 00:04:02,000 --> 00:04:05,770 ja siis mõned teised. Aga me läheme sinna natuke hiljem jooksul pset. 63 00:04:08,050 --> 00:04:13,100 >> Nii et esimene, lihtsalt sattuda faili I / O enne kui me minema pset, 64 00:04:13,100 --> 00:04:19,860 avada faili näiteks mida sa pead tegema, on tegelikult määratud osuti selle faili. 65 00:04:19,860 --> 00:04:22,710 Nii et meil on FILE * pointer. 66 00:04:22,710 --> 00:04:27,140 Sel juhul, ma helistan ta on pointer, sest see saab olema minu infile. 67 00:04:27,140 --> 00:04:33,340 Ja nii ma lähen kasutada funktsiooni fopen ja seejärel faili nimi 68 00:04:33,340 --> 00:04:36,360 ja siis millises režiimis ma lähen tegelema faili. 69 00:04:36,360 --> 00:04:42,080 Nii et seal on "r" antud juhul lugeda, "w" kirjutamiseks ja seejärel "a" lisades. 70 00:04:42,080 --> 00:04:44,270 Näiteks, kui olete tegelevad infile 71 00:04:44,270 --> 00:04:47,310 ja kõik, mida tahame teha, on lugeda bitid ja baidid seal ladustatud, 72 00:04:47,310 --> 00:04:50,420 siis oled ilmselt läheb taha kasutada "r", nagu teie režiimis. 73 00:04:50,420 --> 00:04:54,520 Kui soovite tegelikult kirjutada, millist teha uue faili 74 00:04:54,520 --> 00:04:57,220 siis mida me kavatseme teha, on me kavatseme avada uus fail 75 00:04:57,220 --> 00:05:02,410 ja kasutada "w" režiim kirjalikult. 76 00:05:02,410 --> 00:05:07,540 >> Siis kui sa tegelikult lugemisel vastu võetud failid, struktuur on järgmine. 77 00:05:07,540 --> 00:05:14,930 Esmalt hulka kursor struct mis sisaldavad baiti, et sa loed. 78 00:05:14,930 --> 00:05:19,830 Nii et see saab olema lõpuks asukoht baiti, et sa loed. 79 00:05:19,830 --> 00:05:23,360 Sa siis lähed näitavad, suurus, meeldib põhiliselt mitu baiti 80 00:05:23,360 --> 00:05:30,100 Teie programm peab lugema, et faili suurus põhimõtteliselt üks element on, 81 00:05:30,100 --> 00:05:32,620 ja siis sa lähed täpsustada, kui palju elemente, mida soovite lugeda. 82 00:05:32,620 --> 00:05:34,980 Ja siis lõpuks, sa pead teadma, kus sa loed sealt 83 00:05:34,980 --> 00:05:37,580 nii et see saab olema teie ka osuti. 84 00:05:37,580 --> 00:05:41,780 Ma värvilisel neid, sest fread on ka väga sarnane ümbernimetamisel nimega, 85 00:05:41,780 --> 00:05:47,050 va soovite veenduda, et te kasutate õiges järjekorras, 86 00:05:47,050 --> 00:05:51,960 veenduge, et sa oled tegelikult kirjalikult või lugedes paremalt fail. 87 00:05:54,910 --> 00:05:58,610 >> Nii et siis nagu enne, kui meil on suurus element samuti mitmeid elemente, 88 00:05:58,610 --> 00:06:00,600 siis saame mängida siin natuke. 89 00:06:00,600 --> 00:06:06,810 Ütle Mul on koer struct ja nii siis ma tahan lugeda kaks koera korraga. 90 00:06:06,810 --> 00:06:12,450 Mida ma võiksin teha, on öelda suurus üks element saab olema suurus üks koer 91 00:06:12,450 --> 00:06:14,770 ja ma lähen tegelikult lugeda kaks neist. 92 00:06:14,770 --> 00:06:18,290 Teise mida ma võiksin teha, on öelda, ma lihtsalt loen ühte elementi 93 00:06:18,290 --> 00:06:21,340 ja et üks element saab olema suurus kaks koera. 94 00:06:21,340 --> 00:06:24,320 Nii et analoogne kuidas te saate sellist mängida suurus ja arv 95 00:06:24,320 --> 00:06:28,250 sõltuvalt sellest, mida on rohkem intuitiivne teile. 96 00:06:28,250 --> 00:06:30,810 >> Hea küll. Nii et nüüd saame kirjalikult faile. 97 00:06:30,810 --> 00:06:36,880 Kui soovite kirjutada faili esimene argument on tegelikult kuhu lugemine. 98 00:06:36,880 --> 00:06:42,050 Nii et põhimõtteliselt andmeid, et te ei kavatse kirjutada arvesse faili 99 00:06:42,050 --> 00:06:44,490 mis on välja kursor lõpus. 100 00:06:44,490 --> 00:06:47,670 Nii et kui olete tegelevad pset, veenduge, et te ei saa segi ajada. 101 00:06:47,670 --> 00:06:50,480 Võib-olla on mõisted kõrvuti. 102 00:06:50,480 --> 00:06:58,090 Võite tõmmata mõisted üles käsitsi kirjutades mees ja seejärel ümbernimetamisel nimega, näiteks 103 00:06:58,090 --> 00:06:59,950 terminali või saate saata tagasi sellele slaidile 104 00:06:59,950 --> 00:07:03,570 ja veenduge, et te kasutate õige. 105 00:07:03,570 --> 00:07:08,700 Nii et jällegi ümbernimetamisel nimega, kui sul on fail, mida soovite kirjutada arvesse, 106 00:07:08,700 --> 00:07:14,290 et see saab olema viimane argument ja mis saab olema osuti selle faili. 107 00:07:14,290 --> 00:07:18,670 Nii siis see, kuidas me käsitleme kirjalikult ehk mitu baiti korraga, 108 00:07:18,670 --> 00:07:21,820 aga oletame, et soovite lihtsalt kirjutada vaid üks märk. 109 00:07:21,820 --> 00:07:25,940 Nagu näeme hiljem selle Näiteks rasterpildid me peame kasutama seda. 110 00:07:25,940 --> 00:07:32,180 See, kui saame kasutada fputc sisuliselt lihtsalt paneb ühe märgi korraga, chr, 111 00:07:32,180 --> 00:07:37,050 arvesse faili viitaja, ja see on meie välja pointer seal. 112 00:07:38,700 --> 00:07:41,560 Siis kui me küsida või kirjutada faili 113 00:07:41,560 --> 00:07:44,690 fail on jälgida, kus me oleme. 114 00:07:44,690 --> 00:07:47,810 Nii et see on omamoodi kursori faili asendinäit. 115 00:07:47,810 --> 00:07:54,330 Ja nii iga kord, kui me kirjutada ja lugeda jälle faili 116 00:07:54,330 --> 00:07:56,760 fail tegelikult mäletab, kus see on, 117 00:07:56,760 --> 00:07:59,270 ja nii see jätkub, kus kursor. 118 00:07:59,270 --> 00:08:03,970 See võib olla kasulik, kui soovite, ütleme, lugeda teatud midagi teha 119 00:08:03,970 --> 00:08:06,160 ja siis loe järgmistes summa, 120 00:08:06,160 --> 00:08:10,700 kuid mõnikord me võiksite minna tagasi või tegelikult algavad teatud künnise. 121 00:08:10,700 --> 00:08:16,870 Siis fseek funktsioon, mida ta teeb on võimaldab meil liikuda kursori mõne faili 122 00:08:16,870 --> 00:08:19,680 teatud baitide arv. 123 00:08:19,680 --> 00:08:24,260 Ja siis me peame tegema, on määrata, kuhu on kontrollväärtus. 124 00:08:24,260 --> 00:08:31,520 Nii et kas see liigub edasi või tagasi, kust kursor parajasti on, 125 00:08:31,520 --> 00:08:35,750 või saame määrata, et see tuleb lihtsalt liikuda alates faili algusest 126 00:08:35,750 --> 00:08:37,090 või faili lõppu. 127 00:08:37,090 --> 00:08:41,230 Ja nii saab läbida negatiivne või positiivne väärtuste summa, 128 00:08:41,230 --> 00:08:44,960 ja mis liiki kursori kas edasi või tagasi. 129 00:08:46,170 --> 00:08:51,920 >> Enne kui me sattuda teiste psets, mis tahes küsimustele faili I / O? 130 00:08:53,860 --> 00:08:59,990 Okei. Nagu me sattuda rohkem näiteid, võid vabalt mind peatada küsimustele. 131 00:08:59,990 --> 00:09:06,930 >> Nii Dekkari, sa kätte bitmap faili sarnaneb see punane üks slaid, 132 00:09:06,930 --> 00:09:14,510 ja see näeb välja selline - hunnik punast täppi - ja sa tõesti ei tea, mis on kirjutatud. 133 00:09:14,510 --> 00:09:23,310 Kui teil kissitama, võib teil olla võimalik näha kerget sinakat värvi sees keskel. 134 00:09:23,310 --> 00:09:26,270 Sisuliselt see on kui tekst on salvestatud. 135 00:09:26,270 --> 00:09:30,270 Seal oli mõrv, mis juhtus, ja me peame teada saama, kes seda tegi. 136 00:09:30,270 --> 00:09:36,760 Selleks, et meil on vaja sellist teisendada see pildi loetavas vormingus. 137 00:09:36,760 --> 00:09:42,740 Kui te olete kunagi kokku puutunud selle, mõnikord oleks vähe komplektid 138 00:09:42,740 --> 00:09:48,510 kuhu oleks luup punase kile. Igaüks? Jah. 139 00:09:48,510 --> 00:09:52,770 Nii et sa oleks kätega midagi sellist, siis oleks luup 140 00:09:52,770 --> 00:09:58,130 punase kile üle, siis paneks ta üle pildi, 141 00:09:58,130 --> 00:10:03,410 ja teil oleks võimalik näha peidetud sõnumi teel. 142 00:10:03,410 --> 00:10:07,080 Meil ei ole luup punase kile, nii et selle asemel me ei kavatse sellist luua oma 143 00:10:07,080 --> 00:10:09,060 Selles pset. 144 00:10:09,060 --> 00:10:15,760 Ja nii kasutaja saab sisestada Dekkari, siis aimugi,. Bmp, 145 00:10:15,760 --> 00:10:18,800 nii see on infile, see punane täpp sõnum 146 00:10:18,800 --> 00:10:23,550 ja siis nad ütlevad verdict.bmp saab olema meie outfile. 147 00:10:23,550 --> 00:10:27,900 Nii see läheb, et luua uus digitaalkujutisena sarnane aimugi 1 148 00:10:27,900 --> 00:10:32,600 välja arvatud loetavas vormingus, kus näeme varjatud sõnum. 149 00:10:32,600 --> 00:10:37,550 >> Kuna me ei kavatse tegelema toimetamine ja manipuleerimine rasterpildid mingisugune, 150 00:10:37,550 --> 00:10:42,400 me ei kavatse sellist sukelduda struktuurist need bitmap faili. 151 00:10:42,400 --> 00:10:48,130 Käisime üle need natuke loeng, kuid vaatame neisse veel. 152 00:10:48,130 --> 00:10:51,740 Rasterpildid on sisuliselt lihtsalt paigutus baiti 153 00:10:51,740 --> 00:10:55,790 kus me oleme määratud mis baitides tähenda midagi. 154 00:10:55,790 --> 00:11:00,540 Nii et siin on selline nagu linna digitaalkujutisena 155 00:11:00,540 --> 00:11:08,550 öeldes, et see algab mõned päisefaile, algab mõned andmed sinna. 156 00:11:08,550 --> 00:11:16,540 Sa näed, et umbes baidi number 14 suurus on näidustatud on digitaalkujutisena, 157 00:11:16,540 --> 00:11:18,520 ja see jätkub. 158 00:11:18,520 --> 00:11:23,810 Aga mida me tõesti huvitatud siin hakkab ümber baidi number 54. 159 00:11:23,810 --> 00:11:26,060 Meil on need RGB kolmikud. 160 00:11:26,060 --> 00:11:30,760 Mida see tegema hakkab on sisaldavad tegelike pikslit, värvi väärtused. 161 00:11:30,760 --> 00:11:35,950 Kõik eespool, et päises on natuke informatsiooni 162 00:11:35,950 --> 00:11:41,240 vastava pildi suurust, pildi laius ja kõrgus. 163 00:11:41,240 --> 00:11:44,930 Kui me astume polster hiljem, näeme miks pildi suurust 164 00:11:44,930 --> 00:11:48,670 võib olla teistsugune kui laius või kõrgus. 165 00:11:48,670 --> 00:11:54,240 Siis esindada neid - need rasterpiltide on järjestused baite - 166 00:11:54,240 --> 00:11:59,370 mida me võiksime teha, on öelda okei, ma lähen meeles pidada, et kell indeks 14 167 00:11:59,370 --> 00:12:03,380 see on kui suurus on näiteks, kuid mitte see, mida me teeme selle lihtsamaks 168 00:12:03,380 --> 00:12:06,020 on kapseldada see struct. 169 00:12:06,020 --> 00:12:08,880 Ja nii on meil kaks structs näha meid, BITMAPFILEHEADER 170 00:12:08,880 --> 00:12:10,440 ja BITMAPINFOHEADER, 171 00:12:10,440 --> 00:12:14,840 ja nii iga kord, kui loeme selle faili, vaikimisi see saab olla läheb selleks, 172 00:12:14,840 --> 00:12:22,360 ja nii, et see ka läheb täita võetud muutujad nagu biWidth ja biSize. 173 00:12:25,270 --> 00:12:31,230 Ja siis lõpuks, iga piksel on esindatud kolm baiti. 174 00:12:31,230 --> 00:12:35,500 Esimene neist on summa sinine pixel teine ​​on summa roheline, 175 00:12:35,500 --> 00:12:41,120 ja lõpuks punase värvi, kus 0 on sisuliselt puudub sinine või ei ole roheline või mitte punane 176 00:12:41,120 --> 00:12:43,720 ja siis FF on suurim väärtus. 177 00:12:43,720 --> 00:12:46,800 Need on kuueteistkümnendväärtused. 178 00:12:46,800 --> 00:12:53,870 Siis kui meil on ff0000, siis see vastab maksimaalselt sinine 179 00:12:53,870 --> 00:12:58,890 ja siis ei roheline ega punane, nii siis mis annaks meile sinine piksel. 180 00:12:58,890 --> 00:13:04,190 Siis kui meil on ff on kõik ja kõikjal, siis see tähendab, et meil on valge piksel. 181 00:13:04,190 --> 00:13:11,370 See on omamoodi vastupidine tavaliselt siis, kui me ütleme, RGB. See on tegelikult toimub BGR. 182 00:13:12,750 --> 00:13:18,990 >> Nii et kui me tegelikult uurima näide digitaalkujutisena - las ma tõmban seda siin. 183 00:13:31,560 --> 00:13:33,830 See on natuke väike. 184 00:13:39,890 --> 00:13:47,840 Ma Suurendamine ja näeme see pixelated. Tundub plokid värvi. 185 00:13:47,840 --> 00:13:50,110 Sul on valge plokid ja seejärel punane plokke. 186 00:13:50,110 --> 00:13:53,700 Kui mängid Microsoft Paint, näiteks, siis võiks teha midagi sellist 187 00:13:53,700 --> 00:13:58,960 poolt põhimõtteliselt ainult maali teatud ruudud kindlas järjekorras. 188 00:13:58,960 --> 00:14:08,060 Nii siis mida see tähendab, et ka bitmap on järgmine. 189 00:14:08,060 --> 00:14:15,710 Siin on meil esimene valge pikslit, et kõik 6 on f-d, ja siis on meil punane pikslit, 190 00:14:15,710 --> 00:14:19,910 tähistatud 0000FF. 191 00:14:19,910 --> 00:14:27,940 Ja nii jada bytes et meil näitab, kuidas digitaalkujutisena läheb otsima. 192 00:14:27,940 --> 00:14:32,230 Nii, mida ma olen teinud siin on lihtsalt välja kirjutatud kõik need baidid ja seejärel värvitud punane 193 00:14:32,230 --> 00:14:37,550 nii et saate mingi vaata, kui sa kissitama natuke, kuidas sellist näitab naerunägu. 194 00:14:40,180 --> 00:14:46,390 >> Nii, et rasterpiltide töö on ma kujutan ette seda põhimõtteliselt nagu grid. 195 00:14:46,390 --> 00:14:54,940 Ja nii vaikimisi iga rida; peab olema mitu 4 baiti. 196 00:15:00,520 --> 00:15:07,060 Kui me vaatame digitaalkujutisena, sa oled täites iga väärtus. 197 00:15:07,060 --> 00:15:17,370 Näiteks võib teil olla punane siin, roheline siin, sinine siin, 198 00:15:17,370 --> 00:15:24,950 aga sa pead veenduge, et pilt on täidetud koos mitme neli baiti. 199 00:15:24,950 --> 00:15:32,200 Nii et kui ma tahan, et mu pilt on kolm plokki lai, siis ma oleks panna tühi väärtus 200 00:15:32,200 --> 00:15:35,640 viimase ühe teha see mitmekordselt neli. 201 00:15:35,640 --> 00:15:39,530 Siis lisan ka midagi, mida me nõuame polster. 202 00:15:39,530 --> 00:15:43,750 Ma lihtsalt näitamaks, et seal x. 203 00:15:44,920 --> 00:15:54,160 Nüüd ütleme, et me tahame pilt, mis on 7 pikslit pikad, näiteks. 204 00:15:54,160 --> 00:15:59,550 Meil on 1, 2, 3, 4, 5, 6, 7, 205 00:16:04,750 --> 00:16:07,000 ja kõik see täidab värvi. 206 00:16:07,000 --> 00:16:10,620 Nii, et bitmap pilte tegema on see, et peame 8. 207 00:16:10,620 --> 00:16:12,460 Just nüüd on meil 1, 2, 3, 4, 5, 6, 7. 208 00:16:12,460 --> 00:16:19,360 Vajame 8 ruumi digitaalkujutisena lugeda õigesti. 209 00:16:19,360 --> 00:16:25,600 Nii siis, mida me peame tegema, on lisada ainult natuke polster 210 00:16:25,600 --> 00:16:29,430 veenduda, et kõik laiused on ühtne 211 00:16:29,430 --> 00:16:34,260 ja et kõik laiused on 4-ga. 212 00:16:42,110 --> 00:16:47,310 Ja nii ma eespool märkisin, polster kui x või sakiline joon, 213 00:16:47,310 --> 00:16:53,880 kuid tegelik rasterpiltide polster on näidatud kuueteistkümnendsüsteemis 0. 214 00:16:53,880 --> 00:16:57,340 Nii, et oleks üks sümbol, 0. 215 00:16:58,980 --> 00:17:06,329 Mis võib tulla mugav on XXD käsk. 216 00:17:06,329 --> 00:17:11,220 Mis see on tegelikult näitab teile, nagu sarnane sellega, mida ma tegin enne koos smiley 217 00:17:11,220 --> 00:17:15,630 kui ma tegelikult välja printida, mida iga värv oleks piksel 218 00:17:15,630 --> 00:17:21,800 ja siis värvilisel see, kui sa jooksed XXD selliste käskudega, 219 00:17:21,800 --> 00:17:28,670 siis see tegelikult välja printida, mida värvid on neile pikslit. 220 00:17:28,670 --> 00:17:33,810 Mida sa pead tegema, on siin ma näidata, nagu-s 54 221 00:17:33,810 --> 00:17:36,530 ütleb, et ma lähen alustada 54. bait 222 00:17:36,530 --> 00:17:40,820 sest enne seda, mäletad kui me vaatame tagasi linna rasterpildid, 223 00:17:40,820 --> 00:17:42,690 see on kõik päiseteavet ja asjad niimoodi. 224 00:17:42,690 --> 00:17:46,280 Aga mida me tõesti hoolivad on tegelik pikslit, mis näitavad värvi. 225 00:17:46,280 --> 00:17:52,700 Nii et lisades selle lipu-s 54, siis suudame näha värvi väärtused. 226 00:17:52,700 --> 00:17:56,020 Ja ärge muretsege keeruline lipud ja asjad niimoodi. 227 00:17:56,020 --> 00:18:05,020 Kui probleem komplekt spec, pead juhiseid, kuidas kasutada XXD kuvada pikslit. 228 00:18:07,070 --> 00:18:15,590 Nii et kui näete siin, see selline välja näeb roheline kast, see väike asi. 229 00:18:15,590 --> 00:18:23,610 Olen värvilisel 00ff00 nagu põhimõtteliselt öelda ei sinine, palju rohelist, ja ei punane. 230 00:18:23,610 --> 00:18:26,370 Nii et vastab roheline. 231 00:18:26,370 --> 00:18:31,920 Nagu näete siin, me näeme roheline ristkülik. 232 00:18:31,920 --> 00:18:36,660 See roheline ristkülik on ainult 3 pikslit lai, nii siis mida me peame tegema 233 00:18:36,660 --> 00:18:44,350 veenduda, et pilt on 4-ga lai on lisada extra padding. 234 00:18:44,350 --> 00:18:49,460 Ja nii siis see on, kuidas sa näed neid 0s siin. 235 00:18:49,460 --> 00:18:54,510 See tegelikult olla tingitud teie Resize pset, 236 00:18:54,510 --> 00:19:01,350 sisuliselt võttes väike bitmap ja siis suurenda seda 4. 237 00:19:01,350 --> 00:19:09,380 Ja nii me näeme, et tegelikult see pilt on 12 pikslit lai, kuid 12 on 4-ga, 238 00:19:09,380 --> 00:19:12,940 ja nii me tegelikult ei näe 0s lõpus, sest meil ei ole vaja lisada mõni 239 00:19:12,940 --> 00:19:19,070 sest see on täielikult polsterdatud. See ei ole enam ruumi. 240 00:19:20,720 --> 00:19:23,470 >> Okei. Küsimusi polster? 241 00:19:25,150 --> 00:19:27,460 Okei. Lahe. 242 00:19:27,460 --> 00:19:32,520 >> Nagu ütlesin, rasterpildid on lihtsalt jada bytes. 243 00:19:32,520 --> 00:19:39,170 Ja mis meil on selle asemel, et jälgida täpselt, mis number bait 244 00:19:39,170 --> 00:19:47,050 vastab spetsiifilise elemendi, me tegelikult oleme loonud struct esindada seda. 245 00:19:47,050 --> 00:19:50,930 Mis meil on RGBTRIPLE struct. 246 00:19:50,930 --> 00:19:54,590 Kui sul on näiteks on RGB kolmekordne, 247 00:19:54,590 --> 00:20:00,970 sest see on teatud tüüpi määratleda struktuure, siis pääsete rgbtBlue muutuja, 248 00:20:00,970 --> 00:20:09,520 sarnaselt roheline ja punane muutujad, mis näitab, kui palju sinine, roheline ja punane, 249 00:20:09,520 --> 00:20:11,580 vastavalt sul on. 250 00:20:11,580 --> 00:20:16,800 >> Nii et kui meil on sinine muutuja väärtuseks 0, roheline komplekt FF 251 00:20:16,800 --> 00:20:22,060 mis on maksimaalne väärtus saab olla, ja siis punane muutuja väärtuseks 0, 252 00:20:22,060 --> 00:20:27,870 siis mis värvi oleks see eriti RGB kolmekordne koosneb? >> [Üliõpilane] Green. 253 00:20:27,870 --> 00:20:29,150 Green. Täpselt. 254 00:20:29,150 --> 00:20:34,480 See saab olema kasulik teada, et kui teil on astme RGB kolmekordne, 255 00:20:34,480 --> 00:20:41,340 tegelikult võite kasutada suuruse värv - sinine, roheline ja punane - eraldi. 256 00:20:43,350 --> 00:20:54,900 >> Nüüd, kui me rääkisime struktuuri, et võtame pilk BMP faili. 257 00:20:54,900 --> 00:20:57,870 Need on structs tehtud teie jaoks. 258 00:20:57,870 --> 00:21:01,820 Siin on meil BITMAPFILEHEADER struct. 259 00:21:01,820 --> 00:21:07,610 Huvi on suurus. 260 00:21:07,610 --> 00:21:12,660 Hiljem, meil on infot päis, mis on veel mõned asjad, mis on huvitav meile, 261 00:21:12,660 --> 00:21:15,480 nimelt suurus, laius ja kõrgus. 262 00:21:15,480 --> 00:21:19,170 Nagu me minna hiljem, kui sa lugeda toimikule, 263 00:21:19,170 --> 00:21:25,500 see automaatselt loeb, sest oleme seadnud selleks, et olla sama. 264 00:21:25,500 --> 00:21:31,990 Nii biSize sisaldab õigust baiti, mis vastavad tegelikule suurusele pilt. 265 00:21:34,700 --> 00:21:40,500 Ja siis siin lõpuks, nagu me rääkisime, meil on RGBTRIPLE typedef struktuure. 266 00:21:40,500 --> 00:21:46,840 Meil on rgbtBlue, roheline ja punane sellega seotud. 267 00:21:48,210 --> 00:21:49,340 >> Suur. Okei. 268 00:21:49,340 --> 00:21:56,360 Nüüd, kui me mõistame rasterpildid natuke aru, et meil on faili päis 269 00:21:56,360 --> 00:22:00,790 ja info kaudu seotud ja siis pärast, et meil on huvitav kraam 270 00:22:00,790 --> 00:22:05,110 värvid, ja need värvid on esindatud RGBTRIPLE structs, 271 00:22:05,110 --> 00:22:12,710 ja need omakorda on kolm väärtused seotud sinine, roheline ja punane. 272 00:22:12,710 --> 00:22:17,270 >> Nii et nüüd saame omamoodi mõelda Recover veidi. 273 00:22:17,270 --> 00:22:20,130 Vabandust. Mõtle Dekkari. 274 00:22:20,130 --> 00:22:25,750 Kui meil aimugi faili, siis mida me tahame teha, on lugeda, et see pikselhaaval 275 00:22:25,750 --> 00:22:33,860 ja siis kuidagi muuta need pikslid, et saaksime väljastada see loetavas vormingus. 276 00:22:33,860 --> 00:22:41,020 Ja nii väljund, siis me läheme kirjutada pikselhaaval arvesse verdict.bmp faili. 277 00:22:41,020 --> 00:22:45,120 See on kuidagi palju teha. Me mõistame, et. 278 00:22:45,120 --> 00:22:49,860 Nii et mida oleme teinud, on meil tegelikult annab teile copy.c. 279 00:22:49,860 --> 00:22:57,610 Mis copy.c teeb, on lihtsalt teeb täpse koopia antud bitmap faili ja siis näitab seda. 280 00:22:57,610 --> 00:23:01,900 Nii see juba avab faili teile, loeb pikselhaaval, 281 00:23:01,900 --> 00:23:04,510 ja siis kirjutab ta arvesse väljundfaili. 282 00:23:04,510 --> 00:23:07,080 >> Võtame pilk seda. 283 00:23:13,390 --> 00:23:18,290 See on tagada nõuetekohane kasutamine, 284 00:23:18,290 --> 00:23:22,640 saada failinimesid siin. 285 00:23:22,640 --> 00:23:29,940 Mis see on see seab sisendfail olema, mida oleme möödunud aastal ka infile siin, 286 00:23:29,940 --> 00:23:34,750 mis on meie teine ​​käsurea argument. 287 00:23:34,750 --> 00:23:37,640 Kontrollib, et veenduda, et saame avada faili. 288 00:23:38,960 --> 00:23:44,860 Kontrollib, et veenduda saame teha uusi outfile siin. 289 00:23:45,630 --> 00:23:53,270 Siis sa mida see siin, see lihtsalt põhimõtteliselt hakkab lugemise sisse bitmap faili algusest. 290 00:23:53,270 --> 00:23:56,700 Alguses, nagu me teame, sisaldab BITMAPFILEHEADER, 291 00:23:56,700 --> 00:24:03,200 ja nii need järjestused bittide aitab otseselt täita BITMAPFILEHEADER. 292 00:24:03,200 --> 00:24:07,940 Nii et meil on siin ütleb, et BITMAPFILEHEADER BF - 293 00:24:07,940 --> 00:24:13,150 see on meie uus muutuja tüüpi BITMAPFILEHEADER - 294 00:24:13,150 --> 00:24:22,560 me lähme sinna sisse panna bf mida me lugeda ka pointer, mis on meie infile. 295 00:24:22,560 --> 00:24:23,970 Kui palju me lugeda? 296 00:24:23,970 --> 00:24:32,160 Me loeme mitu baiti peame sisaldada kogu BITMAPFILEHEADER. 297 00:24:32,160 --> 00:24:34,660 Samuti see, mida me teeme infot päises. 298 00:24:34,660 --> 00:24:39,010 Nii et me jätkuvalt mööda meie faili infile, 299 00:24:39,010 --> 00:24:44,360 ja me pidime lugema need bitid ja baidid, ja me kõrvaldamine neid otse 300 00:24:44,360 --> 00:24:47,880 nendesse juhtumeid muutujad, mida me teeme. 301 00:24:49,370 --> 00:24:53,800 Siin me oleme lihtsalt tegemise kindel, et bitmap on bitmap. 302 00:24:57,670 --> 00:25:01,030 >> Nüüd on meil outfile, eks? 303 00:25:01,030 --> 00:25:04,420 Nii nagu see on, kui me loome, see on sisuliselt tühi. 304 00:25:04,420 --> 00:25:07,710 Nii et me peame põhimõtteliselt luua uue bitmap nullist. 305 00:25:07,710 --> 00:25:12,280 Mis me teeme, on meil veenduda, et me kopeerida faili päis 306 00:25:12,280 --> 00:25:16,850 ja info kaudu nagu infile on. 307 00:25:16,850 --> 00:25:22,850 Mis me teeme, on me kirjutame - ja pidage meeles, et bf on muutuja 308 00:25:22,850 --> 00:25:29,300 Tüübi BITMAPFILEHEADER, nii et mida me teeme, on meil lihtsalt kasutada, et sisu 309 00:25:29,300 --> 00:25:34,980 kirjutada arvesse outfile. 310 00:25:36,550 --> 00:25:38,510 Siin, mäletad me rääkisime polster, 311 00:25:38,510 --> 00:25:47,820 kuidas see on oluline veenduda, et summa pikslit et meil on 4-ga. 312 00:25:47,820 --> 00:25:52,790 See on päris kasulik valem arvutada, kui palju polster teil on 313 00:25:52,790 --> 00:25:57,670 antud laius fail. 314 00:25:57,670 --> 00:26:04,120 Ma tahan, et te meeles pidada, et copy.c meil arvutamise valem polster. 315 00:26:04,120 --> 00:26:07,970 Okei? Nii et igaüks meeles pidama. Suur. 316 00:26:07,970 --> 00:26:14,050 Nii siis mida copy.c ei järgmisena on ta kordab üle kõik scanlines. 317 00:26:14,050 --> 00:26:23,730 Ta läheb läbi rida ja siis salvestab iga kolmekordne et see loeb 318 00:26:23,730 --> 00:26:26,920 ja siis kirjutab see outfile. 319 00:26:26,920 --> 00:26:33,120 Nii siis siin me pidime lugema vaid üks RGB kolmekordne korraga 320 00:26:33,120 --> 00:26:39,860 ja siis panna, et sama kolmekordne arvesse outfile. 321 00:26:41,120 --> 00:26:48,340 Keeruline osa on see, et polster ei ole RGB kolmekordne, 322 00:26:48,340 --> 00:26:55,200 ja seega ei saa me just lugesin, et polster summa RGB kolmikud. 323 00:26:55,200 --> 00:27:01,460 Mida me peame tegema, on tegelikult lihtsalt liikuda meie pildi asendinäit, liikuda meie kursori 324 00:27:01,460 --> 00:27:06,840 et selline Otse üle kõik pehmendusega nii, et me oleme järgmisel real. 325 00:27:06,840 --> 00:27:12,990 Ja siis mida see teeb, on koopia näitab teile, kuidas võiksite lisada polster. 326 00:27:12,990 --> 00:27:14,990 Nii oleme arvutanud, kui palju padding peame, 327 00:27:14,990 --> 00:27:18,220 nii et tähendab, et peame polster arv 0.. 328 00:27:18,220 --> 00:27:24,510 Mis see on jaoks silmus, mis paneb polster arv 0. meie outfile. 329 00:27:24,510 --> 00:27:31,170 Ja siis lõpuks, kui sulgete mõlemad failid. Sulgete infile samuti outfile. 330 00:27:31,170 --> 00:27:34,870 >> Nii see on, kuidas copy.c töid, 331 00:27:34,870 --> 00:27:37,430 ja et see saab olema päris kasulik. 332 00:27:39,720 --> 00:27:43,750 Selle asemel, et lihtsalt tegelikult otseselt kopeerimist ja kleepimist 333 00:27:43,750 --> 00:27:46,800 või lihtsalt vaadata seda ja kirjutama mida iganes sa tahad, 334 00:27:46,800 --> 00:27:49,440 võite lihtsalt tahan seda käsklust terminalis, 335 00:27:49,440 --> 00:27:54,520 cp copy.c whodunit.c, mis loob uue faili, whodunit.c, 336 00:27:54,520 --> 00:27:58,330 , mis sisaldab täpselt sama sisu kui koopia teeb. 337 00:27:58,330 --> 00:28:03,880 Nii siis, mida me teha saame, on kasutada seda raamistikku, millele ehitada ja muuta 338 00:28:03,880 --> 00:28:06,900 meie Dekkari faili. 339 00:28:08,500 --> 00:28:14,670 >> Need on meie jaülesandeid teha Dekkari, kuid mida copy.c ei 340 00:28:14,670 --> 00:28:16,730 tegelikult hoolitseb enamik neist meie jaoks. 341 00:28:16,730 --> 00:28:21,900 Nii et kõik me peame tegema järgmisena on muuta pikslite vaja 342 00:28:21,900 --> 00:28:25,920 et tegelikult teevad faili loetav. 343 00:28:25,920 --> 00:28:32,960 Pea meeles, et antud piksli kolmekordne, nii et antud tüüpi muutuja RGBTRIPLE, 344 00:28:32,960 --> 00:28:35,990 pääsete sinine, roheline ja punane väärtused. 345 00:28:35,990 --> 00:28:38,670 See saab tulla mugav, sest kui sa ei pääse neile ligi, 346 00:28:38,670 --> 00:28:41,770 see tähendab, et sa võid ka vaadata neid, 347 00:28:41,770 --> 00:28:45,430 ja mis tähendab, et saate ka muuta. 348 00:28:45,430 --> 00:28:49,430 >> Nii et kui me läksime tagasi meie punane luubi näiteks 349 00:28:49,430 --> 00:28:53,390 põhimõtteliselt, et toimis omamoodi filter meile. 350 00:28:53,390 --> 00:28:58,160 Nii et see, mida me tahame teha, on meil soovite filtreerida kõik kolmikute et tulevad sisse 351 00:28:58,160 --> 00:29:01,240 On mitmeid erinevaid viise, kuidas seda teha. 352 00:29:01,240 --> 00:29:07,100 Põhimõtteliselt saab olla mis iganes tüüpi filtreid soovite. 353 00:29:07,100 --> 00:29:09,890 Võib-olla soovid muuta kõik punased pikslit 354 00:29:09,890 --> 00:29:13,570 või äkki soovite muuta eri värvi pikslit erinevat värvi. 355 00:29:13,570 --> 00:29:15,400 See on sinust. 356 00:29:15,400 --> 00:29:19,580 Pea meeles, et saate vaadata mis värvi piksel on 357 00:29:19,580 --> 00:29:23,000 ja siis saate ka seda muuta kui sa lähed läbi. 358 00:29:24,410 --> 00:29:26,420 >> Okei. Nii et Dekkari. 359 00:29:26,420 --> 00:29:32,760 Kui sa jooksed Dekkari, tead kes süüdlane kuritegu oli. 360 00:29:32,760 --> 00:29:35,540 >> Nüüd läheme suurust. 361 00:29:35,540 --> 00:29:37,990 Me läheme ikkagi tegelevad rasterpildid. 362 00:29:37,990 --> 00:29:40,750 Mida me kavatseme teha, on meil lähed on sisend bitmap 363 00:29:40,750 --> 00:29:45,890 ja siis me lähme edasi mitmes ja siis saad outfile bitmap 364 00:29:45,890 --> 00:29:51,380 kui see on põhimõtteliselt meie infile korrastatakse n. 365 00:29:54,670 --> 00:30:01,450 Ütle minu fail oli lihtsalt üks piksel suur. 366 00:30:01,450 --> 00:30:09,100 Siis kui minu n oli 3, tagi 3, siis ma kordan, et pixel n arv kordi, 367 00:30:09,100 --> 00:30:14,410 nii 3 korda ja siis ka skaala selle alla 3 korda samuti. 368 00:30:14,410 --> 00:30:17,840 Nii et näete ma tagi see vertikaalselt kui ka horisontaalselt. 369 00:30:17,840 --> 00:30:19,680 >> Ja siis siin on näide. 370 00:30:19,680 --> 00:30:27,590 Kui teil on n = 2, siis näeme, et esimene sinine piksel seal korratakse kaks korda 371 00:30:27,590 --> 00:30:30,930 horisontaalselt kui ka kaks korda vertikaalselt. 372 00:30:30,930 --> 00:30:38,040 Ja siis see jätkub, ja nii et teil on otsene tagi oma originaalpilt kahega. 373 00:30:40,920 --> 00:30:47,600 >> Siis kui me üksikasjalikult pseudokoodi selles, tahame avada faili. 374 00:30:47,600 --> 00:30:49,880 Ja siis teades, et kui me läheme tagasi siia, 375 00:30:49,880 --> 00:30:54,540 näeme, et laius outfile saab olema teistsugune kui laius infile. 376 00:30:54,540 --> 00:30:56,130 Mida see tähendab? 377 00:30:56,130 --> 00:31:01,230 See tähendab, et meie header information hakkab muutuma. 378 00:31:01,230 --> 00:31:03,790 Ja mis me tahame teha, on uuendada päises info, 379 00:31:03,790 --> 00:31:11,820 teades, et kui me lugeda faile, kui olete tegutsevad copy.c raamistik, 380 00:31:11,820 --> 00:31:17,570 meil on juba muutuja, mis näitab, mida suurus ja muud sellised asjad. 381 00:31:17,570 --> 00:31:24,060 Nii et kui sul on see, mida sa tahad teha, on muuta need eriti muutujad. 382 00:31:24,060 --> 00:31:29,380 Pea meeles, kui sul on struct, kuidas teile juurdepääsu muutujate et. 383 00:31:29,380 --> 00:31:32,080 Sa kasutad dot operaator, eks? 384 00:31:32,080 --> 00:31:36,420 Siis kasutades, et sa tead, et sa pead muuta header infot. 385 00:31:36,480 --> 00:31:41,030 Nii et siin on lihtsalt nimekiri tegelik elemente, mis ei kavatse olla muutumas oma faili. 386 00:31:41,030 --> 00:31:45,180 Faili suurus saab olema muutuv, pilt, samuti laius ja kõrgus. 387 00:31:45,180 --> 00:31:50,080 Siis lähen tagasi linna rasterpildid, 388 00:31:50,080 --> 00:31:57,730 vaadata, kas see on faili päist või info päis, mis sisaldab kõnealust teavet 389 00:31:57,730 --> 00:32:00,920 ja siis muuda vastavalt vajadusele. 390 00:32:05,010 --> 00:32:12,470 Jällegi ütlen cp copy.c resize.c. 391 00:32:12,470 --> 00:32:19,270 See tähendab, et resize.c nüüd sisaldab kõike, mis sisalduvad sees koopia 392 00:32:19,270 --> 00:32:24,490 sest koopia annab meile viis lugemist igale scanline pikselhaaval. 393 00:32:24,490 --> 00:32:29,860 Välja arvatud nüüd, selle asemel, et lihtsalt muutuvad väärtused nagu me tegime Dekkari, 394 00:32:29,860 --> 00:32:37,980 mida me tahame teha, on meil soovi kirjutada mitu pikslit 395 00:32:37,980 --> 00:32:43,580 nii kaua kui meie n on suurem kui 1. 396 00:32:43,580 --> 00:32:47,110 >> Siis mida me tahame teha, on me tahame venitada seda horisontaalselt n, 397 00:32:47,110 --> 00:32:50,490 samuti venitada vertikaalselt n. 398 00:32:50,490 --> 00:32:52,710 Kuidas võiks me seda teeme? 399 00:32:52,710 --> 00:32:56,890 Ütle oma n on 2 ja teil on see antud infile. 400 00:32:56,890 --> 00:32:58,730 Kursor kavatseb alustada esimesel üks, 401 00:32:58,730 --> 00:33:03,530 ja mida sa tahad teha, kui n on 2, mida soovite printida 2 neist. 402 00:33:03,530 --> 00:33:05,490 Nii et teil on vaja printida 2 neist. 403 00:33:05,490 --> 00:33:10,830 Siis kursor läheb liikuda järgmisele pikslit, mis on punane, 404 00:33:10,830 --> 00:33:18,400 ja see läheb välja printida 2 need punased, lisades selle peale, mida ta on teinud varem. 405 00:33:18,400 --> 00:33:26,280 Siis kursor liigub järgmisele pikslit ja juhtida 2 neist. 406 00:33:26,280 --> 00:33:37,180 Kui te vaatate tagasi copy.c raamistik, mida see teeb siin 407 00:33:37,180 --> 00:33:42,830 on see loob uue astme RGB kolmekordne, uus muutuja nimega kolmekordne. 408 00:33:42,830 --> 00:33:50,500 Ja siin, kui ta loeb selle sisse, see loeb infile 1 RGBTRIPLE 409 00:33:50,500 --> 00:33:53,470 ja salvestab selle sees, et kolmekordne muutuja. 410 00:33:53,470 --> 00:33:57,590 Nii siis tegelikult on muutuja esindab et eriti pixel. 411 00:33:57,590 --> 00:34:05,290 Siis kui sa kirjutad, mida sa tahad teha, on kapseldada ümbernimetamisel nimega arvestusest jaoks silmus 412 00:34:05,290 --> 00:34:11,080 et kirjutab ta oma outfile nii mitu korda kui vaja. 413 00:34:17,449 --> 00:34:20,100 See on piisavalt lihtne. 414 00:34:20,200 --> 00:34:27,590 Lihtsalt põhimõtteliselt korrata kirjutamise protsessi n arv kordi skaala seda horisontaalselt. 415 00:34:27,590 --> 00:34:32,969 >> Aga siis me peame meeles pidama, et meie polster hakkab muutuma. 416 00:34:47,350 --> 00:34:53,020 Varem öelda, et meil oli midagi pikkusega 3. 417 00:34:53,020 --> 00:35:00,130 Siis võiks lihtsalt lisada, kui palju polster? Veel üks teha see 4-ga. 418 00:35:00,130 --> 00:35:10,480 Aga öelda, et me tagi selle konkreetse pildi n = 2. 419 00:35:10,480 --> 00:35:16,300 Nii siis kui palju sinine pikslit oleks meil lõpus? Meil oleks 6. 420 00:35:16,300 --> 00:35:21,470 1, 2, 3, 4, 5, 6. Hea küll. 421 00:35:21,470 --> 00:35:26,580 6 ei ole 4-ga. Mis oleks lähim 4-ga? See saab olema 8. 422 00:35:26,580 --> 00:35:33,200 Nii et me tegelikult läheb on 2 märki padding seal. 423 00:35:33,200 --> 00:35:38,720 >> Kas keegi mäletab, kui meil on valem arvutada polster 424 00:35:38,720 --> 00:35:41,350 ja kus see võiks olla? 425 00:35:41,350 --> 00:35:45,160 [Kuuldamatu õpilase vastus] >> Jah, copy.c. Õigus. 426 00:35:45,160 --> 00:35:49,800 On valem copy.c arvutada, kui palju polster teil on 427 00:35:49,800 --> 00:35:53,810 antud konkreetse laius digitaalkujutisena. 428 00:35:53,810 --> 00:36:02,950 Nii siis, et see saab olema kasulik, kui teil on vaja lisada teatud summa padding 429 00:36:02,950 --> 00:36:06,160 et tegelikult aru saada, kui palju polster teil on vaja lisada. 430 00:36:10,820 --> 00:36:15,850 Aga üks märkus, kuigi see, et sa tahad veenduda, et te kasutate õige suurusega. 431 00:36:15,850 --> 00:36:21,410 Lihtsalt olla ettevaatlik, sest sa oled põhiliselt hakatakse lähtuma kahest bitmap pilte. 432 00:36:21,410 --> 00:36:23,410 Sa tahad teha kindel, et te kasutate õige. 433 00:36:23,410 --> 00:36:26,820 Kui olete arvutamise padding outfile, mida soovite kasutada laius outfile 434 00:36:26,820 --> 00:36:29,860 ja mitte laius eelmine. 435 00:36:29,860 --> 00:36:37,240 >> Suur. Selline hoolitseb venitades kogu digitaalkujutisena horisontaalselt. 436 00:36:37,240 --> 00:36:41,290 Aga mida me tahame teha, on tegelikult venitada vertikaalselt samuti. 437 00:36:41,290 --> 00:36:48,760 See saab olema natuke keerukam, sest kui me oleme lõpetanud kopeerimise järjest 438 00:36:48,760 --> 00:36:51,580 ja kirjalikult, et rida, meie kursor saab olema aasta lõpus. 439 00:36:51,580 --> 00:36:56,210 Nii et kui me uuesti lugeda, siis see on lihtsalt loen ka järgmisele reale. 440 00:36:56,210 --> 00:37:03,660 Nii et mida me tahame teha, on selline leia kuidagi kopeerimine need read uuesti 441 00:37:03,660 --> 00:37:12,500 või lihtsalt selline võttes selle rea ja siis ümberkirjutamist uuesti. 442 00:37:14,380 --> 00:37:17,940 Nagu ma sellist vihjas, on mitmeid erinevaid viise seda teha. 443 00:37:17,940 --> 00:37:23,040 Mida võiks teha, on kui sa lähed läbi ja lugedes eriti scanline 444 00:37:23,040 --> 00:37:28,560 ja muutmist vajalikuks, siis sellist poodi kõik need pikslid massiivi. 445 00:37:28,560 --> 00:37:36,350 Siis hiljem te teate, et teil on vaja printida, et massiivi taas 446 00:37:36,350 --> 00:37:39,830 ja nii saab lihtsalt kasutada, et massiivi teha. 447 00:37:39,830 --> 00:37:44,500 Teine viis seda teha on siis võiks kopeeri alla üks rida, 448 00:37:44,500 --> 00:37:47,950 aru, et teil on vaja kopeerida seda uuesti, nii tegelikult kursori, 449 00:37:47,950 --> 00:37:50,950 ja mis saab olema meetodil fseek. 450 00:37:50,950 --> 00:37:56,410 Sa võid kursori kogu tee tagasi ja korrake koopia protsessi uuesti. 451 00:37:56,410 --> 00:38:03,960 >> Nii et kui meie tagi arv on n siis kui mitu korda oleks me peame tagasi minema 452 00:38:03,960 --> 00:38:10,500 ja kirjutada rida? >> [Üliõpilane] n - 1. >> Jah, täiuslik. n - 1. 453 00:38:10,500 --> 00:38:14,390 Me tegime seda kord juba nii, siis me tahame korrata naasmine protsessi 454 00:38:14,390 --> 00:38:17,460 n - 1 arv kordi. 455 00:38:22,730 --> 00:38:25,860 Okei. Nii et teil on oma resize funktsiooni. 456 00:38:25,860 --> 00:38:34,360 >> Nüüd saame tõesti lõbus osa, minu lemmik pset, mis on Recover. 457 00:38:34,360 --> 00:38:39,580 Selle asemel rasterpildid, seekord me tegeleme JPEG. 458 00:38:39,580 --> 00:38:43,370 Me tegelikult ei antud faili lihtsalt ja JPEG, 459 00:38:43,370 --> 00:38:46,600 me antud põhiliselt toore mälukaardi formaati. 460 00:38:46,600 --> 00:38:51,790 Ja nii see sisaldab natuke infot ja prügi väärtusi alguses, 461 00:38:51,790 --> 00:38:57,240 ja siis algab ja see on hunnik JPEG-faile. 462 00:38:57,240 --> 00:39:03,430 Kuid me kätte kaardi, kus oleme välja pildigalerii; 463 00:39:03,430 --> 00:39:08,300 Sisuliselt me ​​oleme unustanud, kus pildid asuvad kaardiga. 464 00:39:08,300 --> 00:39:12,770 Nii siis meie ülesanne Recover on minna läbi selle kaardi kujul 465 00:39:12,770 --> 00:39:16,500 ja leida need pildid uuesti. 466 00:39:16,500 --> 00:39:23,990 >> Õnneks struktuur JPEG failide ja kartoteek on natuke abiks. 467 00:39:23,990 --> 00:39:28,850 See kindlasti oleks võinud olla veidi keerukam, kui poleks olnud selles konkreetses formaadis. 468 00:39:28,850 --> 00:39:40,160 Iga JPEG faili tegelikult algab kahe võimalik järjestusi, mis on loetletud eespool. 469 00:39:40,160 --> 00:39:42,970 Põhimõtteliselt kui sul on uus JPEG faili 470 00:39:42,970 --> 00:39:52,720 see algab kas jada ffd8 ffe0 või teine, ffd8 ffe1. 471 00:39:52,720 --> 00:39:59,530 Veel üks kasulik asi on teada, et JPEG hoitakse contiguously. 472 00:39:59,530 --> 00:40:03,380 Nii et kui keegi JPEG faili lõpeb, teine ​​algab. 473 00:40:03,380 --> 00:40:07,070 Nii et ei ole mingeid vahepeal väärtusi seal. 474 00:40:07,070 --> 00:40:15,510 Kui oled tabanud algust JPEG, kui olete juba lugenud JPEG, 475 00:40:15,510 --> 00:40:21,800 sa tead, et oled tabanud lõpus eelmise ja algust järgmise üks. 476 00:40:21,800 --> 00:40:25,890 >> Et selline visualiseerida seda, ma tegin skemaatiline. 477 00:40:25,890 --> 00:40:36,910 Teine asi JPEG on see, et me saame lugeda neid järjestusi 512 baiti korraga, 478 00:40:36,910 --> 00:40:39,380 Sarnaselt aasta algusega kaardiga. 479 00:40:39,380 --> 00:40:43,370 Meil ei ole vaja kontrollida iga ühe baidi, sest see oleks nõme. 480 00:40:43,370 --> 00:40:48,200 Nii et selle asemel, mida me teha saame, on tegelikult lihtsalt lugeda 512 baiti korraga 481 00:40:48,200 --> 00:40:54,700 ja siis selle asemel, kontrollides nende vahel nendes tilluke viilud, 482 00:40:54,700 --> 00:40:58,640 saame vaid vaadata alguses 512 baiti. 483 00:40:58,640 --> 00:41:02,570 Sisuliselt on see pilt, mida sa näed on aasta alguses kaardi, 484 00:41:02,570 --> 00:41:08,700 teil on väärtused, mis ei ole tegelikult seotud tegelike JPEG ise. 485 00:41:08,700 --> 00:41:15,830 Aga siis mis mul on täht, mis näitab üks kahest alustades järjestused JPEG. 486 00:41:15,830 --> 00:41:19,910 Nii et kui näed täht, sa tead, et sul on JPEG-faili. 487 00:41:19,910 --> 00:41:25,030 Ja siis iga JPEG faili saab olema teatud arv 512 baiti 488 00:41:25,030 --> 00:41:27,880 kuid mitte tingimata samad mitu. 489 00:41:27,880 --> 00:41:32,050 Nii, et sa tead, et oled tabanud teise JPEG on kui vajutad teise star, 490 00:41:32,050 --> 00:41:39,090 teine ​​algab jada bytes. 491 00:41:39,090 --> 00:41:43,330 Siis mida sa pead siin on sul punane JPEG faili jätkata seni, kuni te tabanud täht, 492 00:41:43,330 --> 00:41:45,150 mis tähistab uue värvi. 493 00:41:45,150 --> 00:41:48,510 Sa jätkata ja siis põrkad teise täht, vajutad teise JPEG, 494 00:41:48,510 --> 00:41:50,590 jätkad kogu tee lõpuni. 495 00:41:50,590 --> 00:41:53,180 Sa oled viimasel pildil siin, roosa. 496 00:41:53,180 --> 00:41:58,220 Sa lähed lõpuni kuni vajutad faili lõppu iseloomu. 497 00:41:58,220 --> 00:42:00,820 See saab olema väga kasulik. 498 00:42:00,820 --> 00:42:03,170 >> Mõned peamised takeaways siin: 499 00:42:03,170 --> 00:42:06,670 Kartoteek ei alga JPEG, 500 00:42:06,670 --> 00:42:13,350 aga kui JPEG algab kõik JPEG hoitakse kõrvuti üksteisega. 501 00:42:17,520 --> 00:42:20,420 >> Mõned pseudokoodi jaoks taastada. 502 00:42:20,420 --> 00:42:22,570 Esiteks, me avada meie kartoteek, 503 00:42:22,570 --> 00:42:27,500 ja mis on kavatse olla kasutades meie Faili I / O funktsioone. 504 00:42:27,500 --> 00:42:32,430 Me läheme kordama järgmist protsessi, kuni oleme jõudnud faili lõppu. 505 00:42:32,430 --> 00:42:36,450 Me läheme lugeda 512 baiti korraga. 506 00:42:36,450 --> 00:42:39,180 Ja mida ma ütlesin siin on me kavatseme seda säilitada puhver, 507 00:42:39,180 --> 00:42:46,230 nii et põhimõtteliselt kinni hoida neid 512 baiti kuni me teame täpselt, mida teha nendega. 508 00:42:46,230 --> 00:42:50,300 Siis mida me tahame teha, on me tahame kontrollida, kas oleme tabanud täht või mitte. 509 00:42:50,300 --> 00:42:57,960 Kui me oleme tabanud täht, kui oleme tabanud üks alustades järjestused, 510 00:42:57,960 --> 00:42:59,980 siis me teame, et oleme tabanud uus JPEG faili. 511 00:42:59,980 --> 00:43:08,860 Mida me tahame teha, on meil lähed tahan luua uus fail meie pset4 kataloog 512 00:43:08,860 --> 00:43:14,480 tegemise jätkamiseks, et faili. 513 00:43:14,480 --> 00:43:18,220 Aga ka, kui me oleme juba teinud JPEG enne, 514 00:43:18,220 --> 00:43:25,620 siis me tahame lõpetada selle faili ja lükake seda pset4 kausta 515 00:43:25,620 --> 00:43:29,780 kus me peame selle faili salvestatud, sest kui me ei täpsustata, et me oleme jõudnud, et JPEG faili 516 00:43:29,780 --> 00:43:37,290 siis me põhimõtteliselt on määramata summa. JPEG lõpe kunagi. 517 00:43:37,290 --> 00:43:40,840 Nii et me tahame veenduda, et kui me lugemist, et JPEG-faili ja kirjalikult, 518 00:43:40,840 --> 00:43:46,590 tahame konkreetselt sulgeda, et selleks, et avada järgmise üks. 519 00:43:46,590 --> 00:43:48,430 Me tahame kontrollida mitut asja. 520 00:43:48,430 --> 00:43:52,880 Tahame kontrollida, kas me oleme alguses uue JPEG meie puhver 521 00:43:52,880 --> 00:43:56,780 ja ka siis, kui me juba oleme leidnud JPEG enne 522 00:43:56,780 --> 00:44:03,930 sest, mis muudab teie protsessi veidi. 523 00:44:03,930 --> 00:44:07,880 Nii et siis pärast sa lähed läbi kogu tee ja vajutad faili lõppu, 524 00:44:07,880 --> 00:44:11,570 siis mida sa teha tahad on, mida sa tahad sulgeda kõik failid, mis on praegu avatud. 525 00:44:11,570 --> 00:44:14,100 See on arvatavasti viimane JPEG fail, mis teil on, 526 00:44:14,100 --> 00:44:18,930 samuti kartoteek, et olete tegelenud. 527 00:44:21,940 --> 00:44:28,670 >> Viimane takistus, et me peame tegelema on see, kuidas tegelikult teha JPEG-faili 528 00:44:28,670 --> 00:44:31,950 ja kuidas tegelikult lükake seda kausta. 529 00:44:33,650 --> 00:44:39,850 Pset nõuab, et iga JPEG et te leiate olema järgmises vormingus, 530 00:44:39,850 --> 00:44:43,990 kus sul on number. jpg. 531 00:44:43,990 --> 00:44:50,750 Arv, isegi kui see on 0, me nimetame seda 000.jpg. 532 00:44:50,750 --> 00:44:55,730 Kui sa leiad JPEG oma programmi, 533 00:44:55,730 --> 00:44:58,040 sa lähed tahan nimetada seda et see on leitud. 534 00:44:58,040 --> 00:44:59,700 Mida see tähendab? 535 00:44:59,700 --> 00:45:03,530 Me peame mingi jälgida, kui palju oleme leidnud 536 00:45:03,530 --> 00:45:08,680 ja mis number iga JPEG peaks olema. 537 00:45:08,680 --> 00:45:13,800 Siin me läheme ära sprintf funktsioon. 538 00:45:13,800 --> 00:45:17,480 Sarnaselt printf, mis lihtsalt selline graafika väärtus viidud terminal, 539 00:45:17,480 --> 00:45:23,910 sprintf prindib faili viidud kausta. 540 00:45:23,910 --> 00:45:30,870 Ja mis see teeks kui mul oleks sprintf pealkiri ja seejärel string seal, 541 00:45:30,870 --> 00:45:36,660 oleks välja printida 2.jpg. 542 00:45:36,660 --> 00:45:41,020 Eeldades, et ma olen suletud minu faile õigesti, 543 00:45:41,020 --> 00:45:47,210 mis sisaldavad faili, et olin kirjalikult läbi. 544 00:45:47,210 --> 00:45:50,320 Aga üks asi on see, et kood, mis mul siin 545 00:45:50,320 --> 00:45:53,360 ei ole päris rahuldavad mida pset nõuab. 546 00:45:53,360 --> 00:46:02,410 Pset nõuab, et teine ​​JPEG faili nimi peaks olema 002 asemel vaid 2. 547 00:46:02,410 --> 00:46:09,160 Nii et kui sa välja printida nimi, siis ehk võiksite muuta kohatäide pisut. 548 00:46:09,160 --> 00:46:18,140 >> Kas keegi mäletab, kuidas me lubada lisatühikud me printida midagi? 549 00:46:18,140 --> 00:46:22,530 Jah. >> [Üliõpilane] Paned 3 vahel protsendimärk ja 2. >> Jah, täiuslik. 550 00:46:22,530 --> 00:46:25,610 Sa paned 3 käesolevas asjas, kuna tahame ruumi 3. 551 00:46:25,610 --> 00:46:32,590 % 3d oleks ilmselt teile 002.jpg 2 asemel. 552 00:46:32,590 --> 00:46:40,120 Esimene argument arvesse sprintf funktsioon on tegelikult char massiiv, 553 00:46:40,120 --> 00:46:42,520 mis me varem teadnud, kui stringid. 554 00:46:42,520 --> 00:46:50,700 Need tahe, selline rohkem nagu ajutine ladustamine, lihtsalt salvestada tulemuseks oleva stringi. 555 00:46:50,700 --> 00:46:54,950 Sa ei tõesti tegelema, kuid teil on vaja kaasata. 556 00:46:54,950 --> 00:47:00,710 >> Teades, et iga faili nimi on arv, mis kulub kolm märki, 557 00:47:00,710 --> 00:47:06,770 ja siis. jpg, kui kaua peaks see massiiv olla? 558 00:47:09,070 --> 00:47:14,310 Viska number. Mitu tähemärki pealkirjas, nime? 559 00:47:18,090 --> 00:47:26,320 Nii et seal on 3 hashtags, periood, jpg. >> [Üliõpilane] 7. >> 7. Mitte päris. 560 00:47:26,320 --> 00:47:32,000 Me läheme taha 8, sest me tahame, et võimaldada null terminaator samuti. 561 00:47:45,340 --> 00:47:49,730 >> Lõpuks lihtsalt venitama protsessi, et sa pead olema teinud juba taastuma, 562 00:47:49,730 --> 00:47:55,420 teil on mõned alguses teavet. 563 00:47:55,420 --> 00:48:02,460 Sa jätkata kuni leiad algust JPEG faili 564 00:48:02,460 --> 00:48:07,900 ja mis võib olla kas üks kahest alustades järjestusi. 565 00:48:07,900 --> 00:48:12,510 Sa lugedes. Iga kaldkriipsuga siin esindab 512 baiti. 566 00:48:12,510 --> 00:48:22,630 Sa lugedes, lugedes kuni sul tekib teise Käivitusjärjekord. 567 00:48:22,630 --> 00:48:29,790 Kui olete, et te lõpuks praeguse JPEG - sel juhul on punane, 568 00:48:29,790 --> 00:48:31,030 nii et sa tahad lõpetada seda. 569 00:48:31,030 --> 00:48:35,540 Sa tahad sprintf nime, et oma pset4 kausta 570 00:48:35,540 --> 00:48:41,580 siis sa tahad, et avada uus JPEG ja siis lugedes 571 00:48:41,580 --> 00:48:46,370 kuni sul tekib järgmine. 572 00:48:46,370 --> 00:48:49,040 Lugedes, lugedes, 573 00:48:49,040 --> 00:48:56,290 ja siis lõpuks, lõpuks, sa lähed, et jõuda lõpuks fail, 574 00:48:56,290 --> 00:49:00,360 ja et sa tahad sulgeda viimase JPEG et sa töötasid, 575 00:49:00,360 --> 00:49:08,380 sprintf et oma pset4 kausta ja seejärel vaadata kõiki pilte, et olete saanud. 576 00:49:08,380 --> 00:49:12,050 Need pildid on tegelikult pilte CS50 personal 577 00:49:12,050 --> 00:49:16,430 ja nii see on kui boonus lõbus osa pset jõuab 578 00:49:16,430 --> 00:49:26,310 on see, et te olete võistlevad oma osa leida TFS pilte 579 00:49:26,310 --> 00:49:34,610 ja pildistada neid tõestada, et sa oled teinud pset 580 00:49:34,610 --> 00:49:37,030 ja nii saab näha, millised töötajad on pildid. 581 00:49:37,030 --> 00:49:41,510 Nii siis pildistada nii, et töötajad. Vahel pead jälitama neid. 582 00:49:41,510 --> 00:49:44,680 Ilmselt mõned neist püüavad põgeneda sind. 583 00:49:44,680 --> 00:49:47,320 Pildistada neid. 584 00:49:47,320 --> 00:49:51,190 See on pidev. See ei ole tingitud kui pset põhjuseks. 585 00:49:51,190 --> 00:49:53,340 Tähtaeg tehakse teatavaks spec. 586 00:49:53,340 --> 00:49:58,060 Siis koos oma jagu, kumb osa võtab kõige pilte 587 00:49:58,060 --> 00:50:04,430 kõige töötajat võidab päris vinge auhind. 588 00:50:04,430 --> 00:50:08,890 See on omamoodi stiimul saada oma pset4 valmis nii kiiresti kui võimalik 589 00:50:08,890 --> 00:50:10,820 sest siis saab pikali äri 590 00:50:10,820 --> 00:50:14,570 jaht sätestatakse kõik erinevad CS50 töötajat. 591 00:50:14,570 --> 00:50:17,500 See ei ole kohustuslik, küll, et kui sa saad pilte 592 00:50:17,500 --> 00:50:20,310 siis olete lõpetanud pset4. 593 00:50:20,310 --> 00:50:23,970 >> Ja ma olen lõpetanud kiirtutvustus 4, nii et tänan teid kõiki, et tulite. 594 00:50:23,970 --> 00:50:29,330 Õnn kohtumeditsiini. [Aplaus] 595 00:50:29,330 --> 00:50:31,000 [CS50.TV]