1 00:00:00,000 --> 00:00:09,780 >> [Tónlist spila] 2 00:00:09,780 --> 00:00:11,150 >> ZAMYLA CHAN: Við skulum takast batna. 3 00:00:11,150 --> 00:00:14,030 Batna er líklega uppáhalds PSET minn, og fyrst og fremst vegna þess að ég held að það sé 4 00:00:14,030 --> 00:00:15,650 virkilega, virkilega flott. 5 00:00:15,650 --> 00:00:19,040 Grundvallaratriðum, þú ert gefið minni kort skrá þar sem 6 00:00:19,040 --> 00:00:20,900 myndirnar hafa verið eytt. 7 00:00:20,900 --> 00:00:23,650 En hvað þú ert að fara að gera er að batna þá alla. 8 00:00:23,650 --> 00:00:24,250 >> OK. 9 00:00:24,250 --> 00:00:28,230 Svo það er mjög spennandi, en kannski svolítið erfið, vegna þess að þú ert 10 00:00:28,230 --> 00:00:32,430 gefið tómt C skrá og þú þarft að fylla það inn 11 00:00:32,430 --> 00:00:36,250 OK, þannig að við skulum brjóta þetta í viðráðanleg hluta. 12 00:00:36,250 --> 00:00:38,160 Þú þarft að opna minniskort skrá. 13 00:00:38,160 --> 00:00:39,900 Það virðist nógu einfalt. 14 00:00:39,900 --> 00:00:43,030 Þá finna upphaf á JPG mynd. 15 00:00:43,030 --> 00:00:46,740 Allar skrár á þessu minni kort eru að fara að vera jpgs. 16 00:00:46,740 --> 00:00:50,840 Þá, þegar þú hefur fundið í upphafi, þú ert að fara að opna nýjan JPG, að 17 00:00:50,840 --> 00:00:57,610 er, eins og að búa til JPG, og skrifa 512 bæti í einu þar til ný JPG er 18 00:00:57,610 --> 00:01:02,930 fundið, og binda enda á áætlun, einu sinni þú uppgötva lok skrárinnar. 19 00:01:02,930 --> 00:01:06,400 >> Svo fyrstu skrefin fyrst er að opna minniskortið skrá. 20 00:01:06,400 --> 00:01:09,850 En þú veist þetta nú þegar, og það er skrá I / O aðgerð sem er að fara til 21 00:01:09,850 --> 00:01:12,030 reynst mjög gagnlegt. 22 00:01:12,030 --> 00:01:12,820 OK. 23 00:01:12,820 --> 00:01:14,760 Svo hvað ert jpgs? 24 00:01:14,760 --> 00:01:16,330 Vegna þess að við þurfum að upphafi. 25 00:01:16,330 --> 00:01:21,310 Jæja, jpgs, rétt eins bita kort, eru bara röð af bytes. 26 00:01:21,310 --> 00:01:30,660 Sem betur fer, hverjum JPG byrjar með annaðhvort 0xff, 0xd8, 0xff, 0xe0 sekvens 27 00:01:30,660 --> 00:01:33,610 bæti, eða annar runa af bætum. 28 00:01:33,610 --> 00:01:37,250 >> Svo þessir fjórir bæti benda upphafið að JPG. 29 00:01:37,250 --> 00:01:40,780 Enginn annar en þeim tveimur samsetningar af fjórum bæti. 30 00:01:40,780 --> 00:01:44,840 Og sem betur fer fyrir okkur, annar staðreynd að við geta nýtt sér er að hver 31 00:01:44,840 --> 00:01:48,550 JPG er geymt hlið-við-hlið á minniskortinu. 32 00:01:48,550 --> 00:01:52,210 Ég hef fulltrúa í uppbyggingu minniskort schematicaiiy á þetta 33 00:01:52,210 --> 00:01:53,310 renna hér. 34 00:01:53,310 --> 00:01:59,270 Hér sérhver ferningur, hvert rétthyrningur, táknar 512 bæti og það byrjar 35 00:01:59,270 --> 00:02:01,750 með grátt í að við gerum ekki raunverulega hafa a JPG. 36 00:02:01,750 --> 00:02:05,700 >> En þá erum við högg loksins blokk með stjörnu. 37 00:02:05,700 --> 00:02:10,940 Það þýðir að fyrstu fjórir Bætiút af þeim 512 er einn af þeim tveimur 38 00:02:10,940 --> 00:02:13,230 byrja röð af JPG. 39 00:02:13,230 --> 00:02:17,340 Og við förum þaðan, og síðan einu sinni einn JPG endar, næsta einn byrjar. 40 00:02:17,340 --> 00:02:20,990 Við gerum ekki alltaf hafa eitthvað meira grár rúm á milli. 41 00:02:20,990 --> 00:02:25,550 >> En hvernig eigum við að lesa í raun og veru þetta, og lesa 512 bæti svo að við getum gert 42 00:02:25,550 --> 00:02:27,500 samanburðurinn fyrsta sæti? 43 00:02:27,500 --> 00:02:33,470 Jæja, við skulum fara aftur til fread, sem tekur í strúktúr sem mun innihalda 44 00:02:33,470 --> 00:02:34,470 bæti sem þú ert að lesa. 45 00:02:34,470 --> 00:02:36,570 Svo þú ert að fara að setja þá í það - 46 00:02:36,570 --> 00:02:42,192 stærð, fjölda, og þá inpointer að þú ert að lesa úr. 47 00:02:42,192 --> 00:02:49,900 Nú viljum við að lesa 512 í einu, og við viljum geyma þetta í buffer, 48 00:02:49,900 --> 00:02:50,700 Ég ætla að kalla það. 49 00:02:50,700 --> 00:02:54,100 >> Í grundvallaratriðum, þá ætlum við að halda á þessum 512 bæti og gera 50 00:02:54,100 --> 00:02:55,500 hluti með það, ekki satt? 51 00:02:55,500 --> 00:02:58,260 Við erum annað hvort að fara að bera saman fyrsta fjórum bytes, eða við erum að fara að 52 00:02:58,260 --> 00:02:59,830 lesa það í, OK? 53 00:02:59,830 --> 00:03:05,050 Svo þá gögn bendillinn þá þjóna sem biðminni þinn, og 54 00:03:05,050 --> 00:03:07,745 inpointer og vel, það er bara að fara að vera minniskortið. 55 00:03:07,745 --> 00:03:09,500 >> Aftur til okkar minniskort aðaldráttum. 56 00:03:09,500 --> 00:03:14,690 Við erum að fara að lesa 512 bæti í einu, geyma hvert 512-bæti blokk 57 00:03:14,690 --> 00:03:19,190 í buffer, að halda á þeim biðminni, þá 512 bæti, þar sem við vitum 58 00:03:19,190 --> 00:03:22,000 nákvæmlega hvað á að gera þá. 59 00:03:22,000 --> 00:03:25,960 Svo er upphaf ekki neitt, svo við munum lesa biðminni, bera saman það, og 60 00:03:25,960 --> 00:03:28,160 við munum ekki þurfa að gera neitt með það. 61 00:03:28,160 --> 00:03:32,030 Og þá, högg við loks stjörnu loka, sem þýðir að við höfum 62 00:03:32,030 --> 00:03:33,630 fundum fyrstu JPG okkar. 63 00:03:33,630 --> 00:03:36,560 Svo biðminni nú halda bæti úr því JPG. 64 00:03:36,560 --> 00:03:40,220 >> Í næsta skipti 512 bytes, því þeir eru ekki stjarna blokk, eru einnig 65 00:03:40,220 --> 00:03:41,740 hluti þeirrar JPG. 66 00:03:41,740 --> 00:03:47,630 Og jpgs samfelld þaðan á í, þar til við högg næsta JPG. 67 00:03:47,630 --> 00:03:51,880 Og þá heldur biðminni þá 512 bytes fyrir því JPG og 68 00:03:51,880 --> 00:03:53,580 svo framvegis, og svo framvegis. 69 00:03:53,580 --> 00:03:54,250 OK. 70 00:03:54,250 --> 00:03:58,980 >> Svo þegar þú högg the fyrstur stjörnumerkt blokk, fyrsta JPG, hvernig gera þú 71 00:03:58,980 --> 00:04:01,910 reyndar vel, opna hana? 72 00:04:01,910 --> 00:04:04,990 Skulum gera nýja JPG. 73 00:04:04,990 --> 00:04:08,846 Filenames fyrir JPG ert að fara að vera í formi, tala, tala, 74 00:04:08,846 --> 00:04:13,830 number.jpg, að þeir eru heitir í í hvaða röð þeir finnast, 75 00:04:13,830 --> 00:04:14,780 byrja á 0. 76 00:04:14,780 --> 00:04:19,890 >> Svo fyrsta JPG sem þú finna verður 000.jpg. 77 00:04:19,890 --> 00:04:26,560 Svo, líklega góð hugmynd að halda utan um hversu margar jpgs þú hefur fundið hingað til. 78 00:04:26,560 --> 00:04:27,610 Svo er að skrá nafn. 79 00:04:27,610 --> 00:04:29,660 En hvernig gera þú raunverulega að? 80 00:04:29,660 --> 00:04:34,310 Jæja, erum við að fara að nota fall sem kallast sprintf. 81 00:04:34,310 --> 00:04:38,260 A svolítið svipað printf, þar þú getur notað staðgengla fyrir strengi, 82 00:04:38,260 --> 00:04:42,420 nema í þessu tilfelli, sprintf mun prenta skráin út í núverandi 83 00:04:42,420 --> 00:04:45,550 skrá, ekki í flugstöðinni. 84 00:04:45,550 --> 00:04:46,120 >> OK. 85 00:04:46,120 --> 00:04:49,950 Svo hér sjáum við að við höfum titil, char array sem mun geyma 86 00:04:49,950 --> 00:04:55,120 hlýst band, og við framhjá í titill af the raunverulegur band með að 87 00:04:55,120 --> 00:04:58,720 tákn, rétt eins og við höfum lærði að gera með printf. 88 00:04:58,720 --> 00:05:05,530 En þetta númer sem ég hef hér mun gefa 2.jpg, ekki 002.jpg. 89 00:05:05,530 --> 00:05:09,920 Svo ég leyfi þér að finna út hvernig á að breyta Ígildi að gera 90 00:05:09,920 --> 00:05:11,920 rétt nafn. 91 00:05:11,920 --> 00:05:12,610 >> OK. 92 00:05:12,610 --> 00:05:17,390 Svo þegar þú hefur sprintf'd þá getur þú opna að skrá, vegna þess að það er til staðar í 93 00:05:17,390 --> 00:05:22,690 möppuna, með fopen, nota titill, og þá hvað háttur sem þú vilt 94 00:05:22,690 --> 00:05:25,140 til að opna þessa skrá inn 95 00:05:25,140 --> 00:05:30,260 Svo nú er að við höfum opnað nýja JPG skrá, nú getum við skrifað 512 bæti á a 96 00:05:30,260 --> 00:05:33,320 tími, þar til ný JPG finnst. 97 00:05:33,320 --> 00:05:36,640 Þannig að við skulum taka aðra útlit á setningafræði fwrite. 98 00:05:36,640 --> 00:05:40,060 >> Ég veit að ég er að sýna þessi mynd a mikið, en ég vil bara að ganga úr skugga um að 99 00:05:40,060 --> 00:05:43,530 þú krakkar fæ ekki of ruglaður, því Ég veit að það er mjög auðvelt að 100 00:05:43,530 --> 00:05:47,000 blanda upp fyrsta og síðasta rök í lagi. 101 00:05:47,000 --> 00:05:54,390 En mundu að þú ert að skrifa frá biðminni þín í út skrá myndum. 102 00:05:54,390 --> 00:05:59,250 >> Nú þegar þú veist hvernig skrifa 512 bæti inn JPG skrá sem þú hefur 103 00:05:59,250 --> 00:06:03,230 búin, vel, við viljum hætta að ferli þegar við höfum náð enda 104 00:06:03,230 --> 00:06:06,720 kortið okkar, vegna þess að það mun ekki vera einhverjar fleiri myndir til að finna. 105 00:06:06,720 --> 00:06:10,760 Þannig að við skulum fara aftur til fread einu sinni enn, ég lofa. 106 00:06:10,760 --> 00:06:15,600 fread skilar hversu margir hlutir á stærð, stærð, voru tilbúin í góðum árangri. 107 00:06:15,600 --> 00:06:19,440 Fullkomlega, þetta er að fara að vera hvað þú framhjá í fyrir fjölda, ekki satt? 108 00:06:19,440 --> 00:06:24,140 Þar sem þú ert að reyna að lesa númerið af þáttum stærð, stærð. 109 00:06:24,140 --> 00:06:29,380 En ef fread er ekki hægt að lesa það fjöldi staka, þá verður það aftur 110 00:06:29,380 --> 00:06:32,530 hvað sem tala það lesa með góðum árangri. 111 00:06:32,530 --> 00:06:36,310 >> Nú, einn mikilvægur hlutur að hafa í huga er að ef þú notar aðra skrá I / O 112 00:06:36,310 --> 00:06:43,860 virka eins fgetc, verður það einnig að skila hversu margir hlutir það að lesa með góðum árangri. 113 00:06:43,860 --> 00:06:48,000 Hvað er gagnlegt um þessa aðgerð er að ef þú notar aðgerðir inni í 114 00:06:48,000 --> 00:06:53,190 ástand, það verður að framkvæma sig á meðan að ákvarða að ástand, sem er 115 00:06:53,190 --> 00:06:54,340 bara mjög gagnlegt. 116 00:06:54,340 --> 00:07:00,440 Þannig að ef þú hefur þetta skilyrði, segja, ef fread biðminni, sizeof DOG, 2, 117 00:07:00,440 --> 00:07:04,870 músina, jafngildir jafngildir 1, sem þýðir að mig langar að lesa 118 00:07:04,870 --> 00:07:06,540 2 hundar á þeim tíma. 119 00:07:06,540 --> 00:07:13,490 En ef fread skilar 1 í stað 2 eins og gert ráð fyrir, sem þýðir að það eru 2 120 00:07:13,490 --> 00:07:16,480 hundar eftir í minn skrá, heldur 1. 121 00:07:16,480 --> 00:07:22,450 En ef það skilar 2, þá hef ég enn þessir 2 hundar inni í biðminni minni. 122 00:07:22,450 --> 00:07:26,280 >> Svo nú er um að gefur þér tilfinningu um hvernig á að stöðva fyrir lok skrárinnar, en 123 00:07:26,280 --> 00:07:28,940 við skulum fara í gegnum nú í rökfræði. 124 00:07:28,940 --> 00:07:32,460 Hvernig eigum við að stykki í raun allt þessara þátta saman? 125 00:07:32,460 --> 00:07:36,880 Þegar við fyrsta högg JPG okkar, þar við vitum að jpgs eru geymdar 126 00:07:36,880 --> 00:07:40,910 contiguously, munum við vera að skrifa þar við ná í lok kortið skrá. 127 00:07:40,910 --> 00:07:43,950 En við viljum ekki að skrifa nokkuð fyrr en þá. 128 00:07:43,950 --> 00:07:48,710 Svo það skiptir máli, ekki bara að við erum á upphafið að nýju JPG, en hvort 129 00:07:48,710 --> 00:07:50,655 við höfum þegar fundið JPG eða ekki. 130 00:07:50,655 --> 00:07:55,390 >> Ef það er upphafið að nýjum JPG, munum við langar að loka núverandi JPG okkar skrá ef 131 00:07:55,390 --> 00:07:59,110 við höfum eitt opin, og opin nýtt til að skrifa inn. 132 00:07:59,110 --> 00:08:03,340 Ef það er ekki að byrja á nýju JPG, þó munum við halda sömu JPG skrá 133 00:08:03,340 --> 00:08:05,910 opna og skrifa inn í það. 134 00:08:05,910 --> 00:08:10,100 Við munum skrifa biðminni okkar í hvort JPG skrá við höfum opið, að því tilskildu að 135 00:08:10,100 --> 00:08:12,120 við höfum einn opinn, auðvitað. 136 00:08:12,120 --> 00:08:16,190 Ef við höfum ekki fundið fyrstu JPG okkar enn, eigum við að skrifa ekki neitt. 137 00:08:16,190 --> 00:08:20,290 Og þetta ferli heldur áfram þangað til þú ná sambandi við lok kortsins skrá. 138 00:08:20,290 --> 00:08:23,410 >> Og að lokum, munt þú vilt gera viss um að þú fclose allir 139 00:08:23,410 --> 00:08:25,800 skrár sem þú hefur fopened. 140 00:08:25,800 --> 00:08:28,360 Þegar þú ert ánægð með hugtök, taka a líta á sumir 141 00:08:28,360 --> 00:08:30,840 sauðakóðanum, sem ég hef sett hér. 142 00:08:30,840 --> 00:08:34,830 Fyrst, þú vilt opna kortið skrá, og þá endurtaka eftirfarandi ferli 143 00:08:34,830 --> 00:08:37,144 þar til þú hefur náð enda á kortinu. 144 00:08:37,144 --> 00:08:40,880 Þú vilt lesa 512 bæti í stuðpúða. 145 00:08:40,880 --> 00:08:43,934 Að nota þessi buffer, youll 'vilja til að athuga hvort sem þú ert á the byrjun af a 146 00:08:43,934 --> 00:08:45,300 ný JPG eða ekki. 147 00:08:45,300 --> 00:08:48,400 Og svarið við þeirri spurningu mun áhrif skrá stjórnun - 148 00:08:48,400 --> 00:08:51,940 hvaða skrár þú opnar, sem sjálfur gera þér loka. 149 00:08:51,940 --> 00:08:55,220 >> Þá hefur þú fundið nú þegar JPG? 150 00:08:55,220 --> 00:08:57,740 Hvernig hefur þú verið að halda utan um það? 151 00:08:57,740 --> 00:09:01,735 Þá, eftir að þú munt annað hvort skrifa inn í núverandi JPG sem þú 152 00:09:01,735 --> 00:09:07,090 hafa opinn eða ekki skrifa það á alla, vegna þess að þú hefur ekki fundið JPG ennþá. 153 00:09:07,090 --> 00:09:10,870 Að lokum, þegar þú hefur náð í lok skráin, youll 'vilja til að loka hvaða 154 00:09:10,870 --> 00:09:12,590 eftir skrár sem þú hefur opinn. 155 00:09:12,590 --> 00:09:14,590 Við viljum vera snyrtilegu hér. 156 00:09:14,590 --> 00:09:18,790 >> Og með það, hefur þú náð öllum sem vantar skrá frá þessi minni 157 00:09:18,790 --> 00:09:21,620 kort, sem er nokkuð magnað feat. 158 00:09:21,620 --> 00:09:23,430 Svo klappa þér á bakinu. 159 00:09:23,430 --> 00:09:27,560 En, það er einn þáttur í á PSET, sem er keppni. 160 00:09:27,560 --> 00:09:30,920 Þú munt komast að því að allar myndirnar að þú hafir náð eru í raun 161 00:09:30,920 --> 00:09:32,820 myndir af starfsfólki CS50 er. 162 00:09:32,820 --> 00:09:38,500 Svo ef þú ert á háskólasvæðinu eða einhvers staðar nálægt, þá getur þú tekið myndir með 163 00:09:38,500 --> 00:09:42,600 starfsfólk, og þann hluta sem hefur flestar myndir með starfsmenn 164 00:09:42,600 --> 00:09:46,940 frá endurheimtum þeirra skrám mun fá ógnvekjandi verðlaun. 165 00:09:46,940 --> 00:09:50,650 Með það, þá þú hefur lokið að batna PSET. 166 00:09:50,650 --> 00:09:53,600 Mitt nafn er Zamyla, og þetta er CS50. 167 00:09:53,600 --> 00:10:01,835