Tip:
Highlight text to annotate it
X
>> [Tónlist spila]
>> ZAMYLA CHAN: Við skulum takast batna.
Batna er líklega uppáhalds PSET minn, og fyrst og fremst vegna þess að ég held að það sé
virkilega, virkilega flott.
Grundvallaratriðum, þú ert gefið minni kort skrá þar sem
myndirnar hafa verið eytt.
En hvað þú ert að fara að gera er að batna þá alla.
>> OK.
Svo það er mjög spennandi, en kannski svolítið erfið, vegna þess að þú ert
gefið tómt C skrá og þú þarft að fylla það inn
OK, þannig að við skulum brjóta þetta í viðráðanleg hluta.
Þú þarft að opna minniskort skrá.
Það virðist nógu einfalt.
Þá finna upphaf á JPG mynd.
Allar skrár á þessu minni kort eru að fara að vera jpgs.
Þá, þegar þú hefur fundið í upphafi, þú ert að fara að opna nýjan JPG, að
er, eins og að búa til JPG, og skrifa 512 bæti í einu þar til ný JPG er
fundið, og binda enda á áætlun, einu sinni þú uppgötva lok skrárinnar.
>> Svo fyrstu skrefin fyrst er að opna minniskortið skrá.
En þú veist þetta nú þegar, og það er skrá I / O aðgerð sem er að fara til
reynst mjög gagnlegt.
OK.
Svo hvað ert jpgs?
Vegna þess að við þurfum að upphafi.
Jæja, jpgs, rétt eins bita kort, eru bara röð af bytes.
Sem betur fer, hverjum JPG byrjar með annaðhvort 0xff, 0xd8, 0xff, 0xe0 sekvens
bæti, eða annar runa af bætum.
>> Svo þessir fjórir bæti benda upphafið að JPG.
Enginn annar en þeim tveimur samsetningar af fjórum bæti.
Og sem betur fer fyrir okkur, annar staðreynd að við geta nýtt sér er að hver
JPG er geymt hlið-við-hlið á minniskortinu.
Ég hef fulltrúa í uppbyggingu minniskort schematicaiiy á þetta
renna hér.
Hér sérhver ferningur, hvert rétthyrningur, táknar 512 bæti og það byrjar
með grátt í að við gerum ekki raunverulega hafa a JPG.
>> En þá erum við högg loksins blokk með stjörnu.
Það þýðir að fyrstu fjórir Bætiút af þeim 512 er einn af þeim tveimur
byrja röð af JPG.
Og við förum þaðan, og síðan einu sinni einn JPG endar, næsta einn byrjar.
Við gerum ekki alltaf hafa eitthvað meira grár rúm á milli.
>> En hvernig eigum við að lesa í raun og veru þetta, og lesa 512 bæti svo að við getum gert
samanburðurinn fyrsta sæti?
Jæja, við skulum fara aftur til fread, sem tekur í strúktúr sem mun innihalda
bæti sem þú ert að lesa.
Svo þú ert að fara að setja þá í það -
stærð, fjölda, og þá inpointer að þú ert að lesa úr.
Nú viljum við að lesa 512 í einu, og við viljum geyma þetta í buffer,
Ég ætla að kalla það.
>> Í grundvallaratriðum, þá ætlum við að halda á þessum 512 bæti og gera
hluti með það, ekki satt?
Við erum annað hvort að fara að bera saman fyrsta fjórum bytes, eða við erum að fara að
lesa það í, OK?
Svo þá gögn bendillinn þá þjóna sem biðminni þinn, og
inpointer og vel, það er bara að fara að vera minniskortið.
>> Aftur til okkar minniskort aðaldráttum.
Við erum að fara að lesa 512 bæti í einu, geyma hvert 512-bæti blokk
í buffer, að halda á þeim biðminni, þá 512 bæti, þar sem við vitum
nákvæmlega hvað á að gera þá.
Svo er upphaf ekki neitt, svo við munum lesa biðminni, bera saman það, og
við munum ekki þurfa að gera neitt með það.
Og þá, högg við loks stjörnu loka, sem þýðir að við höfum
fundum fyrstu JPG okkar.
***ðminni nú halda bæti úr því JPG.
>> Í næsta skipti 512 bytes, því þeir eru ekki stjarna blokk, eru einnig
hluti þeirrar JPG.
Og jpgs samfelld þaðan á í, þar til við högg næsta JPG.
Og þá heldur biðminni þá 512 bytes fyrir því JPG og
svo framvegis, og svo framvegis.
OK.
>> Svo þegar þú högg the fyrstur stjörnumerkt blokk, fyrsta JPG, hvernig gera þú
reyndar vel, opna hana?
Skulum gera nýja JPG.
Filenames fyrir JPG ert að fara að vera í formi, tala, tala,
number.jpg, að þeir eru heitir í í hvaða röð þeir finnast,
byrja á 0.
>> Svo fyrsta JPG sem þú finna verður 000.jpg.
Svo, líklega góð hugmynd að halda utan um hversu margar jpgs þú hefur fundið hingað til.
Svo er að skrá nafn.
En hvernig gera þú raunverulega að?
Jæja, erum við að fara að nota fall sem kallast sprintf.
A svolítið svipað printf, þar þú getur notað staðgengla fyrir strengi,
nema í þessu tilfelli, sprintf mun prenta skráin út í núverandi
skrá, ekki í flugstöðinni.
>> OK.
Svo hér sjáum við að við höfum titil, char array sem mun geyma
hlýst band, og við framhjá í titill af the raunverulegur band með að
tákn, rétt eins og við höfum lærði að gera með printf.
En þetta númer sem ég hef hér mun gefa 2.jpg, ekki 002.jpg.
Svo ég leyfi þér að finna út hvernig á að breyta Ígildi að gera
rétt nafn.
>> OK.
Svo þegar þú hefur sprintf'd þá getur þú opna að skrá, vegna þess að það er til staðar í
möppuna, með fopen, nota titill, og þá hvað háttur sem þú vilt
til að opna þessa skrá inn
Svo nú er að við höfum opnað nýja JPG skrá, nú getum við skrifað 512 bæti á a
tími, þar til ný JPG finnst.
Þannig að við skulum taka aðra útlit á setningafræði fwrite.
>> Ég veit að ég er að sýna þessi mynd a mikið, en ég vil bara að ganga úr skugga um að
þú krakkar fæ ekki of ruglaður, því Ég veit að það er mjög auðvelt að
blanda upp fyrsta og síðasta rök í lagi.
En mundu að þú ert að skrifa frá biðminni þín í út skrá myndum.
>> Nú þegar þú veist hvernig skrifa 512 bæti inn JPG skrá sem þú hefur
búin, vel, við viljum hætta að ferli þegar við höfum náð enda
kortið okkar, vegna þess að það mun ekki vera einhverjar fleiri myndir til að finna.
Þannig að við skulum fara aftur til fread einu sinni enn, ég lofa.
fread skilar hversu margir hlutir á stærð, stærð, voru tilbúin í góðum árangri.
Fullkomlega, þetta er að fara að vera hvað þú framhjá í fyrir fjölda, ekki satt?
Þar sem þú ert að reyna að lesa númerið af þáttum stærð, stærð.
En ef fread er ekki hægt að lesa það fjöldi staka, þá verður það aftur
hvað sem tala það lesa með góðum árangri.
>> Nú, einn mikilvægur hlutur að hafa í huga er að ef þú notar aðra skrá I / O
virka eins fgetc, verður það einnig að skila hversu margir hlutir það að lesa með góðum árangri.
Hvað er gagnlegt um þessa aðgerð er að ef þú notar aðgerðir inni í
ástand, það verður að framkvæma sig á meðan að ákvarða að ástand, sem er
bara mjög gagnlegt.
Þannig að ef þú hefur þetta skilyrði, segja, ef fread biðminni, sizeof DOG, 2,
músina, jafngildir jafngildir 1, sem þýðir að mig langar að lesa
2 hundar á þeim tíma.
En ef fread skilar 1 í stað 2 eins og gert ráð fyrir, sem þýðir að það eru 2
hundar eftir í minn skrá, heldur 1.
En ef það skilar 2, þá hef ég enn þessir 2 hundar inni í biðminni minni.
>> Svo nú er um að gefur þér tilfinningu um hvernig á að stöðva fyrir lok skrárinnar, en
við skulum fara í gegnum nú í rökfræði.
Hvernig eigum við að stykki í raun allt þessara þátta saman?
Þegar við fyrsta högg JPG okkar, þar við vitum að jpgs eru geymdar
contiguously, munum við vera að skrifa þar við ná í lok kortið skrá.
En við viljum ekki að skrifa nokkuð fyrr en þá.
Svo það skiptir máli, ekki bara að við erum á upphafið að nýju JPG, en hvort
við höfum þegar fundið JPG eða ekki.
>> Ef það er upphafið að nýjum JPG, munum við langar að loka núverandi JPG okkar skrá ef
við höfum eitt opin, og opin nýtt til að skrifa inn.
Ef það er ekki að byrja á nýju JPG, þó munum við halda sömu JPG skrá
opna og skrifa inn í það.
Við munum skrifa biðminni okkar í hvort JPG skrá við höfum opið, að því tilskildu að
við höfum einn opinn, auðvitað.
Ef við höfum ekki fundið fyrstu JPG okkar enn, eigum við að skrifa ekki neitt.
Og þetta ferli heldur áfram þangað til þú ná sambandi við lok kortsins skrá.
>> Og að lokum, munt þú vilt gera viss um að þú fclose allir
skrár sem þú hefur fopened.
Þegar þú ert ánægð með hugtök, taka a líta á sumir
sauðakóðanum, sem ég hef sett hér.
Fyrst, þú vilt opna kortið skrá, og þá endurtaka eftirfarandi ferli
þar til þú hefur náð enda á kortinu.
Þú vilt lesa 512 bæti í stuðpúða.
Að nota þessi buffer, youll 'vilja til að athuga hvort sem þú ert á the byrjun af a
ný JPG eða ekki.
Og svarið við þeirri spurningu mun áhrif skrá stjórnun -
hvaða skrár þú opnar, sem sjálfur gera þér loka.
>> Þá hefur þú fundið nú þegar JPG?
Hvernig hefur þú verið að halda utan um það?
Þá, eftir að þú munt annað hvort skrifa inn í núverandi JPG sem þú
hafa opinn eða ekki skrifa það á alla, vegna þess að þú hefur ekki fundið JPG ennþá.
Að lokum, þegar þú hefur náð í lok skráin, youll 'vilja til að loka hvaða
eftir skrár sem þú hefur opinn.
Við viljum vera snyrtilegu hér.
>> Og með það, hefur þú náð öllum sem vantar skrá frá þessi minni
kort, sem er nokkuð magnað feat.
Svo klappa þér á bakinu.
En, það er einn þáttur í á PSET, sem er keppni.
Þú munt komast að því að allar myndirnar að þú hafir náð eru í raun
myndir af starfsfólki CS50 er.
Svo ef þú ert á háskólasvæðinu eða einhvers staðar nálægt, þá getur þú tekið myndir með
starfsfólk, og þann hluta sem hefur flestar myndir með starfsmenn
frá endurheimtum þeirra skrám mun fá ógnvekjandi verðlaun.
Með það, þá þú hefur lokið að batna PSET.
Mitt nafn er Zamyla, og þetta er CS50.