[Powered by Google Translate] [Walkthrough - Harjoitus 4]
[Zamyla Chan - Harvardin yliopisto]
[Tämä on CS50. - CS50.TV]
Selvä. Hei, kaikki, ja tervetuloa läpikäynti 4.
>> Tänään PSET on Forensics.
Forensics on todella hauska PSET että kyse tekemisissä bittikarttatiedostot
löytää tehneen rikoksen.
Sitten aiomme muuttaa joitakin bittikarttatiedostot,
Sitten olemme myös menossa käsitellä todella hauska osa nimeltään Recover,
jossa olemme pohjimmiltaan ojensi muistikortti
jossa joku on vahingossa poistanut kaikki ne tiedostot,
ja olemme pyytäneet palauttaa nämä tiedostot.
>> Mutta ensin ennen kuin pääsemme PSET, olen todella haluavat vain onnitella kaikkia.
Olemme noin keskipisteessä tällä kurssilla.
Quiz 0 on takanamme, ja me olemme pset4, joten lähinnä, olemme puolimatkassa.
Olemme päässeet pitkälle, jos näytät takaisin psets, pset0 ja pset1,
joten onnitella itseäsi siitä,
ja aiomme päästä todella hauskaa.
>> Joten meidän työkalupakki tähän PSET jälleen suorittamisen sijasta sudo yum-y update,
pystymme vain juosta update50 jos olet versio 17.3 ja yläpuolelta laitteen.
Niin varmasti ajaa update50 - se on paljon helpompaa, muutama vähemmän merkkejä -
varmista, että olet uusin versio laitteen.
Erityisesti on tärkeää update50 kun alamme käyttää CS50 Check.
Joten varmista, että teet sen.
>> Kaikkien osien tätä PSET,
aiomme olla tekemisissä tiedosto tulot ja lähdöt, tiedosto I / O.
Aiomme olla menossa yli useita ohjelmia, jotka käsittelevät ryhmät
osoittaa tiedostoja ja tuollaista,
joten haluamme varmistaa, että olemme todella tuttu ja mukava
käsitellään miten tulon ja lähdön tiedostoihin.
>> Vuonna jakelu koodi tähän PSET on tiedosto nimeltä copy.c,
ja sitähän me löydämme tulee olemaan todella hyödyllistä meille
koska aiomme päätyä todella kopioimalla copy.c tiedosto
ja ainoastaan ​​muuttamalla sitä hieman pystyä saavuttamaan ensimmäisen 2 osaa ongelman asetettu.
>> Ja niin sitten kuten aiemmin mainitsin, olemme tekemisissä bittikarttoja sekä JPEG.
Joten todella ymmärtää rakenteen miten nämä tiedostot järjestetään,
miten voimme todella kääntää 0s ja 1s osaksi tietueet
ja asioita, joita voimme todella ymmärtää ja tulkita ja muokata,
että on todella tärkeää,
niin menee JPEG ja bittikarttatiedostot ja ymmärtää rakenteen näiden.
>> Pset4, kuten tavallista, alkaa osa kysymyksiä.
Ne käsittelevät tiedoston I / O ja pääset tottunut siihen.
Sitten osa 1 on jännäri, jossa olet antanut bittikarttatiedosto
joka näyttää ikään kuin punaisia ​​pisteitä ympäri.
Ja sitten pohjimmiltaan mitä aiomme tehdä, on ottaa tämä tiedosto ja vain muokata sitä hieman
osaksi versioon voimme lukea.
Pohjimmiltaan kun päätämme, meillä on sama tiedosto,
paitsi me nähdä piilotettu viesti piilotettu kaikki punaisia ​​pisteitä.
Sitten Resize on ohjelma, joka, koska tiedosto
ja annettiin sitten tiedoston nimi, että se tuottaa ja sitten annetaan numero samoin,
todella muuttaa että bittikarttamuotoisen että kokonaisluku.
Sitten lopuksi, meillä Recover PSET.
Meille annetaan muistikortille ja sitten palauttaa kaikki kuvat
jotka on vahingossa poistettu,
mutta kuten me oppia, ei todellisuudessa poisteta ja poistetaan tiedosto;
me vain eräänlainen menettänyt missä he olivat tiedoston, mutta aiomme palauttaa se.
>> Suuri. Joten menee tiedoston I / O sanottuna nämä ovat koko listan toiminnoista, jotka voit käyttää.
Olet jo nähnyt vähän perusasiat fopen, fread ja fwrite,
mutta aiomme syventää jonkin tiedoston I / O-toimintoja, kuten fputc,
jossa voit vain kirjoittaa yhden merkin kerrallaan,
ja fseek, jossa tavallaan siirtää tiedoston asennonosoittimen eteen-ja taaksepäin,
ja sitten toiset. Mutta me menemme tuohon hieman myöhemmin PSET.
>> Eli ensin vain päästä tiedoston I / O ennen kuin menemme PSET,
avata tiedoston, esimerkiksi mitä sinun pitää tehdä on todella asetettu osoittimen kyseisen tiedoston.
Joten meillä on FILE * osoitin.
Tässä tapauksessa, soitan sitä on osoitin, koska se tulee olemaan minun INFILE.
Ja niin aion käyttää toimintoa fopen ja sitten tiedoston nimi
ja sitten tila, jossa aion olla tekemisissä tiedosto.
Joten on "r" tässä tapauksessa lukea, "w" kirjoittamiseen, ja sitten "" for lisäämällä.
Esimerkiksi, kun olet tekemisissä INFILE
ja kaikki haluat tehdä, on lukea bitit ja tavut varastoidaan
niin olet luultavasti menossa haluavat käyttää "R" kuin tilaan.
Kun haluat itse kirjoittaa, eräänlainen tekevät uuden tiedoston,
niin mitä aiomme tehdä, on aiomme avata uuden tiedoston
ja käyttää "w"-tilassa kirjoittamiseen.
>> Joten sitten kun olet itse lukea osaksi tiedostoja, rakenne on seuraavanlainen.
Ensin kuuluu osoittimen struct jotka sisältävät tavut, että luet.
Niin, että tulee olemaan loppuun sijainnin tavujen luet.
Olet sitten menossa osoittamaan kokoon, kuten periaatteessa kuinka monta tavua
ohjelma on lukea tiedostoon, koko pohjimmiltaan yksi elementti on,
ja sitten olet menossa määrittää, kuinka monta elementtejä haluat lukea.
Ja sitten lopuksi, sinun täytyy tietää, missä olet lukemisen,
niin että tulee olemaan sinun on osoitin.
I värikoodattu Näiden koska fread on myös hyvin samankaltainen fwrite,
paitsi haluat varmistaa, että käytät oikean järjestyksen,
varmista, että olet todella kirjallisesti tai lukee oikean tiedoston.
>> Niin sitten kuin ennen, jos meillä on koko elementin samoin kuin elementtien lukumäärä,
voimme pelata täällä vähän.
Sano Minulla on koira struct ja niin sitten haluan lukea kaksi koiraa kerrallaan.
Mitä voisin tehdä, on sanoa kokoa yhden elementin tulee olemaan kokoa yhden koiran
ja aion itse lukenut niistä kaksi.
Vaihtoehtoisesti, mitä voisin tehdä on sanoa Aion lukea yhden elementin
ja että yksi elementti tulee olemaan koko kaksi koiraa.
Niin, että analogisia miten voit sellaista leikkiä koko ja lukumäärä
riippuen siitä mitä enemmän intuitiivinen sinulle.
>> Selvä. Joten nyt saamme kirjallisesti tiedostoja.
Kun haluat kirjoittaa tiedostoon, ensimmäinen argumentti on oikeastaan ​​missä luet alkaen.
Niin, että pohjimmiltaan tietoja aiot kirjoittaa osaksi tiedoston,
joka on pois osoitin lopussa.
Joten kun olet tekemisissä PSET, varmista ettet hämmentyä.
Ehkä on määritelmät vierekkäin.
Voit vetää määritelmiä ylös käsin kirjoittamalla miehen ja sitten fwrite esimerkiksi
terminaalissa tai voit palata tähän diaan
ja varmista, että käytät oikea.
Joten jälleen, fwrite, kun olet tiedoston, jonka haluat kirjoittaa osaksi,
että tulee olemaan viimeinen väite ja että tulee olemaan osoitin kyseisen tiedoston.
Joten sitten se, miten suhtaudumme kirjallisesti ehkä useita tavuja kerralla,
mutta että haluat vain kirjoittaa vain yhden merkin.
Kuten näemme myöhemmin tässä esimerkiksi bittikartat meidän täytyy käyttää sitä.
Silloin voimme käyttää fputc lähinnä vain asettamalla yksi merkki kerrallaan, chr,
osaksi tiedoston osoitin, ja se on meidän ulos osoitinta siellä.
Joten kun etsimme tai kirjoittaa tiedostoon,
tiedosto on pitää kirjaa siitä, missä olemme.
Joten se on eräänlainen kursorin, tiedosto asennonosoitin.
Ja niin kun me kirjoittaa tai lukea jälleen tiedostoon,
tiedosto todella muistaa missä se on,
ja niin se jatkuu missä kursori on.
Tämä voi olla hyödyllistä, kun haluat vaikkapa lukea tietty määrä tehdä jotain
ja sitten lukea seuraavan summan,
mutta joskus saatamme haluta mennä takaisin tai oikeastaan ​​aloittaa tietty viitearvon.
Joten sitten fseek toiminto, mikä se on voimme siirtää kohdistinta tietyn tiedoston
tietty määrä tavuja.
Ja sitten meidän täytyy tehdä, on määrittää, missä viitearvo on.
Joten joko se liikkuu eteenpäin tai taaksepäin kohdistimen hetkellä on,
tai voimme määritellä, että se olisi vain liikkuu päässä tiedoston alusta
tai tiedoston loppuun.
Ja niin voit kulkea negatiivinen tai positiivinen arvo määrään,
ja että se sellaista siirtää kohdistinta joko eteen-tai taaksepäin.
>> Ennen kuin pääsemme muihin psets, kysyttävää tiedoston I / O?
Okei. Kuten me päästä enemmän esimerkkejä rohkeasti pysäyttää minua kysymyksistä.
>> Joten jännäri, olet ojensi bittikarttatiedostoa samanlainen kuin tämä punainen yksi dian,
ja se näyttää tältä - nippu punaisia ​​pisteitä - ja et todellakaan tiedä mitä on kirjoitettu.
Jos karsastaa, saatat pystyä näkemään hieman sinertävä väri sisälle keskellä.
Pohjimmiltaan se on missä teksti on tallennettu.
Oli murha tapahtui, ja meidän täytyy selvittää kuka sen teki.
Jotta niin, että meidän täytyy tavallaan muuntaa tämän kuvan luettavaan muotoon.
Jos te koskaan kohdannut tätä joskus olisi vähän sarjat
missä haluaisit olla suurennuslasi, jossa punainen kalvo. Kukaan? Joo.
Joten sinun olisi kädellä jotain tällaista, sinulla olisi suurennuslasi
punainen kalvo päälle, voisitte laittaa sen kuvan päälle,
ja sinulla olisi mahdollisuus nähdä viestin piilossa siinä.
Meillä ei ole suurennuslasi punainen kalvo, joten sen sijaan aiomme sellaista luoda oman
tässä PSET.
Ja niin käyttäjä on menossa syöttämään jännäri, sitten vihje,. Bmp,
niin se INFILE, joka on punainen piste viesti
ja sitten he sanovat verdict.bmp tulee olemaan meidän outfile.
Joten se tulee luomaan uuden bittikarttakuvaa samanlainen hajuakaan yksi
paitsi luettavassa muodossa, jossa voimme nähdä piilotettu viesti.
>> Koska aiomme olla tekemisissä muokkaus ja manipuloida bittikarttoja jonkinlaisia,
aiomme sellaista sukelluksen rakenteeseen näiden bittikarttatiedostot.
Menimme näinä hieman luennossa, mutta katsotaanpa niihin hieman.
Bittikarttoja ovat lähinnä vain järjestely tavua
missä olemme määritelty mikä tavua tarkoittaa mitä.
Joten tässä on ikään kuin kartta bittikarttakuvan
sanomalla, että se alkaa joitakin header-tiedostoja, alkaa joitakin tietoja siellä.
Huomaatte, että noin tavu numero 14 koko ilmaistaan ​​sekä bittikarttakuvan,
ja se jatkuu.
Mutta mitä me todella kiinnostunut tästä alkaa noin tavu numero 54.
Meillä on näitä RGB kolminkertaistuu.
Mitä se tulee tehdä, on oltava todellinen pikseliä, väriarvot.
Kaiken yläpuolella, että otsikko on joitakin tietoja
vastaa kuvan kokoa, kuvan leveys ja korkeus.
Kun menemme pehmusteet myöhemmin, näemme miksi kuvan koko
voi olla erilainen kuin leveys tai korkeus.
Joten sitten edustaa näitä - näitä bittikarttakuvia ovat sarjoja tavua -
Mitä voisimme tehdä, on sanoa okei, aion muistaa että indeksi 14,
se jos koko on esimerkiksi vaan mitä aiomme tehdä tämän helpottamiseksi
on kiteyttää sen struct.
Ja niin meillä on kaksi tietueet teki meille BITMAPFILEHEADER
ja BITMAPINFOHEADER,
ja niin kun luemme tätä tiedostoa, oletuksena se tulee olemaan menossa järjestyksessä,
ja niin, jotta se myös aikoo täyttää muuttujiin kuten biWidth ja biSize.
Ja sitten lopuksi, jokainen pikseli edustaa kolme tavua.
Ensimmäinen on määrä sinistä pikselin, toinen on määrä vihreä,
ja lopuksi, paljon punaista, jossa 0 on olennaisesti ei sinistä tai ei vihreä tai ei punaista
ja sitten ff on suurin arvo.
Nämä ovat heksadesimaaliarvot.
Joten jos meillä on FF0000, sitten joka vastaa mahdollisimman paljon sinistä
ja sitten ei vihreää eikä punaista, niin sitten se antaisi meille sininen pikseli.
Sitten jos meillä on FF kaikkialla aluksessa, niin se tarkoittaa, että meillä on valkoinen pikseli.
Tämä on tavallaan vastakkainen tyypillisesti kun sanomme RGB. Se on todella menossa BGR.
>> Joten jos todella tutkia esimerkiksi bittikarttakuvan - haluan säästellä täällä.
Se on vähän pieni.
Olen zoomauksen, ja voimme nähdä se pixelated. Se näyttää lohkojen värin.
Sinulla on valkoiset lohkot ja sitten punaisen korttelin.
Jos pelaat Microsoft Paint, esimerkiksi voisit tehdä jotain tuollaista
by pohjimmiltaan vain maalaamalla ruutuja tietyssä järjestyksessä.
Niin sitten, mitä tämä merkitsee että bittikartta on seuraava.
Täällä meillä on ensimmäinen valkoinen pikseleitä, jotka kaikki 6 ovat f: n, ja sitten meillä on punainen pikseliä,
merkitty 0000FF.
Ja niin jono tavuja, että meillä on osoittaa, kuinka bittikarttakuvan tulee näyttämään.
Joten mitä olen tehnyt täällä on juuri kirjoittanut kaikki nämä tavut ja sitten väritetty punaisella
jotta voit sellaista nähdä, jos karsastaa vähän, miten sellainen osoittaa hymiö kasvot.
>> Siten, että bittikarttakuvia työ on minun kuvitella sitä periaatteessa kuin ruudukko.
Ja niin oletusarvoisesti jokainen rivi ruudukolla on oltava jaollinen 4 tavua.
Jos katsomme bittikarttakuvan, olet täyttämällä jokaisen arvon.
Esimerkiksi, saatat olla punainen täällä, vihreä täällä, sininen täällä,
mutta sinun täytyy varmistaa, että kuva on täytetään useita neljä tavua.
Joten jos haluan kuvan olevan kolmen korttelin leveä, niin olisin täytyy laittaa tyhjä arvo
in viimeinen tehdä neljän kerrannainen.
Joten sitten Lisäisin mitä me vaaditaan täyte.
Menen vain ilmoittaa, että siellä x.
Nyt sanovat haluamme kuvan, joka on 7 pikseliä pitkä, esimerkiksi.
Meillä on 1, 2, 3, 4, 5, 6, 7,
ja kaikki tämä on täytetty värillä.
Siten, että bittikarttakuvia työtä on, että tarvitsemme kahdeksas.
Tällä hetkellä meillä on 1, 2, 3, 4, 5, 6, 7.
Tarvitsemme 8 tilat bittikarttakuvan lukea oikein.
Joten mitä meidän täytyy tehdä, on lisätä vain vähän pehmuste
varmistaa, että kaikki leveydet ovat yhdenmukaisia
ja että kaikki leveydet ovat 4: n monikerta.
Ja niin olen aiemmin todennut, pehmuste kuten x tai koukeroinen viiva,
mutta varsinainen bittikarttakuvia täyte on merkitty heksadesimaalinen 0.
Niin, että olisi vain yksi merkki, 0.
Mikä voisi olla hyötyä on xxd komento.
Mitä se on oikeastaan ​​näyttää, kuten samanlainen kuin mitä tein ennen kanssa hymiö
kun olen itse tulostaa mitä kukin väri olisi se pikselin
ja sitten värikoodattu sitä, kun suoritat xxd seuraavat komennot,
niin se itse tulostaa mitä värit ovat ne pikselit.
Mitä sinun täytyy tehdä, on täällä minä osoittavat, kuten-s 54
sanoo, että aion aloittaa 54. tavun
koska ennen sitä, muistan kun muistelemme kartta bittikarttoja,
että kaikki otsikkotiedot ja tuollaista.
Mutta mitä me todella välitämme on todellinen pikseleitä, jotka osoittavat väri.
Joten lisäämällä että lippu,-s 54, niin pystymme näkemään väriarvot.
Ja älä välitä monimutkaisia ​​liput ja tuollaista.
Vuonna Harjoitus spec, sinun on ohjeet siitä, miten käyttää xxd näyttää kuvapistettä.
Joten jos näet täällä, se tavallaan näyttää vihreää laatikko, tämä pieni juttu.
Olen värejä 00FF00 koska pohjimmiltaan sanomalla ei sinistä, paljon vihreää, eikä punaista.
Siten, että vastaa vihreä.
Kuten näette täällä, näemme vihreä suorakulmio.
Tämä vihreä suorakulmio on vain 3 pikseliä leveä, niin sitten meidän täytyy tehdä
varmista, että kuva on jaollinen 4 leveä on lisätä lisäpehmuste.
Ja niin sitten se miten näette nämä 0s täällä.
Tämä todella on seurausta teidän Resize PSET,
olennaisesti ottaen pieni bittikartta ja sitten laajentaa sitä 4.
Ja niin näemme, että oikeastaan ​​tämä kuva on 12 pikseliä leveä, mutta 12 on jaollinen 4,
ja niin me oikeastaan ​​näe mitään 0s lopussa, koska meidän ei tarvitse lisätä mitään
koska se on täysin pehmustettu. Se ei ole enemmän tilaa.
>> Okei. Kysyttävää pehmuste?
Okei. Cool.
>> Kuten aiemmin mainitsin, bittikarttoja ovat vain jono tavuja.
Ja niin mitä meillä on sen sijaan tarvitsee seurata tarkasti montako tavua
vastaa tiettyä osaa, me itse asiassa luoneet struct edustaa tätä.
Joten mitä meillä on RGBTRIPLE struct.
Aina kun on esiintymän RGB kolminkertainen,
koska tämä on eräänlainen määritellä struct, voit käyttää rgbtBlue muuttuja,
Samoin Green and Red muuttujia, jotka osoittavat, kuinka paljon sininen, vihreä ja punainen,
vastaavasti, sinulla on.
>> Eli jos meillä on sininen muuttuja asetettu 0, vihreä asetettu ff,
mikä on suurin arvo voi olla, ja sitten punainen muuttuja asetettu 0,
niin mikä väri olisi tässä RGB kolminkertainen edustaa? >> [Opiskelija] Vihreä.
Green. Aivan.
Se tulee olemaan hyvä tietää, että aina kun on esiintymän RGB kolminkertainen,
voit itse käyttää värin määrää - sininen, vihreä ja punainen - erikseen.
>> Nyt kun olemme puhuneet rakenteesta että katsotaanpa katsomaan BMP-tiedosto.
Nämä ovat tietueet sinua varten.
Täällä meillä BITMAPFILEHEADER struct.
Mielenkiintoinen on kokoa.
Myöhemmin meillä info otsikon, jossa on muutamia asioita, jotka ovat mielenkiintoisia meille,
nimittäin koko, leveys ja korkeus.
Kuten me mennä myöhemmin, kun olet lukenut tiedoston,
se automaattisesti lukee koska olemme asettaa, jotta sama.
Joten biSize sisältää oikeuden tavua, jotka vastaavat todellista kuvan kokoa.
Ja sitten täällä, lopuksi, kuten olemme puhuneet, meillä RGBTRIPLE typedef struct.
Meillä rgbtBlue, vihreä ja punainen liittyy siihen.
>> Suuri. Okei.
Nyt ymmärrämme bittikarttoja vähän, ymmärtää, että meillä on tiedoston otsikko
ja info otsikko liittyy siihen ja sitten sen jälkeen, meillä on mielenkiintoisia juttuja
ja värejä, ja nuo värit edustavat RGBTRIPLE tietueet,
ja nämä puolestaan ​​on kolme liittyvät arvot on sininen, vihreä ja punainen.
>> Joten nyt voimme tavallaan ajattelen Recover hieman.
Anteeksi. Ajattele jännäri.
Kun meillä on hajuakaan tiedostoa, niin mitä me haluamme tehdä, on lukea sitä pikselivastaavuuden
ja sitten jotenkin muuttaa ne pikselit jotta voimme tulostaa sen luettavaan muotoon.
Ja niin tulostamaan sitä, aiomme kirjoittaa pikselikohtaisesti osaksi verdict.bmp tiedostoon.
Sellainen paljon tekemistä. Ymmärrämme, että.
Joten mitä olemme tehneet, on meillä todella antanut sinulle copy.c.
Mikä copy.c tekee vain tekee tarkan kopion tietyn bittikarttatiedostoa ja sitten tulostaa sen.
Joten tämä jo avaa tiedoston sinulle, lukee pikseli,
ja sitten kirjoittaa sen osaksi tulostetiedostoa.
>> Katsotaanpa katsomaan sitä.
Tämä on taata asianmukainen käyttö,
saada tiedostonimet tänne.
Mikä tämä on siinä syötetiedoston olla mitä olemme hyväksyttiin vuonna INFILE täällä,
joka on toinen komentorivin argumentti.
Tarkistaa, varmista, että voimme avata tiedoston.
Tarkistaa, varmista voimme tehdä uuden outfile täällä.
Sitten mitä tämä tekee täällä, se vain periaatteessa alkaa lukea sisään bittikartta alusta alkaen.
Alussa, kuten tiedämme, on BITMAPFILEHEADER,
ja niin ne sekvenssit bittien suoraan täyttää BITMAPFILEHEADER.
Joten mitä meillä on täällä sanoo että BITMAPFILEHEADER bf -
se on meidän uusi muuttuja tyyppiä BITMAPFILEHEADER -
aiomme laittaa sisälle bf mitä luimme vuonna osoitin, joka on meidän INFILE.
Kuinka paljon lukea?
Luemme kuinka monta tavua meidän sisältävät koko BITMAPFILEHEADER.
Samoin se, mitä teemme info otsikon.
Joten olemme edelleen yhdessä meidän tiedoston INFILE,
ja me lukea nuo bitit ja tavut, ja olemme liittämällä ne suoraan
näihin esimerkkejä muuttujista, jotka olemme tekemässä.
Täällä me vain varmistaa, että bittikartan on bittikartta.
>> Nyt meillä on outfile, eikö?
Niin se on kun luomme, se on lähinnä tyhjä.
Joten meidän on pohjimmiltaan luoda uuden bittikartan tyhjästä.
Mitä me teemme on meidän on varmistettava, että meillä kopioi tiedoston otsikko
ja info otsikon aivan kuten INFILE on.
Mitä teemme me kirjoittaa - ja muistaa, että BF on muuttuva
Tyypin BITMAPFILEHEADER, joten mitä teemme me vain käyttää sisällön
kirjoittaa osaksi outfile.
Täällä muistan puhuimme pehmuste,
kuinka on tärkeää varmistaa, että määrä pikseleitä, että meillä on jaollinen 4.
Tämä on melko hyödyllinen laskukaava kuinka paljon pehmuste olet
koska leveys tiedoston.
Haluan te muistaa, että copy.c meillä laskukaavan täyte.
Okei? Joten jokainen muistaa, että. Suuri.
Joten mitä sitten copy.c tekee seuraavaksi se iteroi kaikki Scanlines.
Se menee läpi rivit ensin ja sitten tallentaa jokaisen kolmen, että se lukee
ja sitten kirjoittaa sen outfile.
Joten tässä me luet vain yhden RGB kolminkertainen kerrallaan
ja sitten asettaa saman kolminkertainen osaksi outfile.
Hankala osa on, että täyte ei ole RGB kolminkertainen,
joten emme voi vain lukea, että täyte määrä RGB kolminkertaistuu.
Mitä meidän täytyy tehdä, on oikeastaan ​​vain siirtää meidän tiedosto asennonosoitin, siirrä meidän kohdistinta
ikään kuin ohittaa kaikki pehmuste niin että me olemme seuraavan rivin.
Ja sitten, mitä tämä tekee on kopio näyttää, miten haluat ehkä lisätä pehmuste.
Joten olemme lasketaan kuinka paljon pehmuste tarvitsemme,
niin se tarkoittaa, että tarvitsemme täyte määrä 0s.
Mikä tämä on for-silmukka, joka asettaa padding määrä 0s meidän outfile.
Ja sitten lopuksi, suljet molemmat tiedostot. Suljet infile sekä outfile.
>> Niin, että miten copy.c toimii,
ja että tulee olemaan melko hyödyllinen.
Sen sijaan vain tosiasiallisesti suoraan kopioimalla ja liittämällä se
tai vain katsomalla sitä ja kirjoittamalla mitä haluat,
saatat vain halua tätä komentoa terminaalissa,
cp copy.c whodunit.c, joka luo uuden tiedoston, whodunit.c,
joka sisältää täsmälleen sama sisältö kuin kopio ei.
Joten mitä voimme tehdä on käyttää sitä puitteet jolle voi rakentaa ja muokata
meidän jännäri tiedoston.
>> Nämä ovat meidän to-DOS tekevän jännäri, mutta mitä copy.c tekee
todella hoitaa useimmat meille.
Joten kaikki mitä meidän tarvitsee tehdä seuraavaksi on muuttaa pikselin tarpeen
todella tehdä tiedosto luettavissa.
Muista, että tietyn pikselin kolminkertainen, joten tietyn muuttuja tyyppiä RGBTRIPLE,
voit käyttää sininen, vihreä ja punainen arvoja.
Että menee ovat käteviä, koska jos et voi käyttää niitä,
se tarkoittaa, että voit myös tarkistaa ne,
ja se tarkoittaa, että voit myös muuttaa niitä.
>> Joten kun menimme takaisin meidän punainen suurennuslasi esimerkiksi
pohjimmiltaan, että toimi eräänlaisena suodattimen meille.
Joten mitä me haluamme tehdä, on haluamme suodattaa kaikki kolminkertaistaa jotka tulevat sisään
On olemassa useita erilaisia ​​tapoja tehdä tätä.
Periaatteessa voit olla mitä tahansa tyyppiä suodattimen haluat.
Ehkä haluat muuttaa kaikki punaiset pikseliä
tai ehkä haluat vaihtaa eri väriä pikselin eri väriä.
Se on sinun.
Muista, että voit tarkistaa, mitä väriä pikseli on
ja voit myös muuttaa sitä olet menossa läpi.
>> Okei. Joten se jännäri.
Kun ajaa jännäri, tiedät kuka syyllinen rikos oli.
>> Nyt aiomme mennä koon.
Aiomme silti käsitellä bittikarttoja.
Mitä me teemme on meidän menossa on tulo bittikartta
ja sitten me aiomme kulkea numero ja sitten saat outfile bittikartta
jos se on pohjimmiltaan meidän INFILE skaalataan n.
Sano minun tiedosto oli vain yksi pikseli suuri.
Sitten jos minun n oli 3, skaalaus 3, niin toistan että pikseli n monta kertaa,
niin 3 kertaa, ja sitten myös skaalata alas 3 kertaa samoin.
Niin näet olen skaalaamalla se pystysuoraan sekä vaakasuoraan.
>> Ja sitten tässä on esimerkki.
Jos sinulla on n = 2, näet, että ensimmäinen sininen pikseli siellä toistettiin kaksi kertaa
vaakasuunnassa sekä kaksi kertaa pystysuunnassa.
Ja sitten se jatkuu, joten sinulla on suora skaalaus alkuperäisen kuvan kaksi.
>> Joten jos me yksityiskohtaisesti pseudokoodi tähän, haluamme avata tiedostoa.
Ja sitten tietäen, että jos palaamme tänne,
näemme, että leveys outfile tulee olemaan erilainen kuin leveys infile.
Mitä se tarkoittaa?
Tämä tarkoittaa sitä, että otsikkoinformaatio muuttuu.
Ja niin, mitä me haluamme tehdä, on päivittää otsikon tiedot,
tietäen, että kun luemme tiedostot, jos olet toimivat copy.c puitteet,
meillä on jo muuttuja, joka osoittaa, mitä kokoa on ja tuollaista.
Joten kun olet, että mitä kannattaa tehdä, on muuttaa kyseisiä muuttujia.
Muista, jos sinulla on struct, miten voit käyttää muuttujia, että.
Voit käyttää piste operaattori, eikö?
Joten sitten käyttää sitä, tiedät, että sinun täytyy muuttaa otsikon info.
Joten tässä on vain lista todellinen elementit, joita aiotaan muuttaa oman tiedoston.
Tiedoston koko tulee olemaan muuttamalla, kuva, sekä leveys ja korkeus.
Niin sitten menee takaisin kartan bittikarttoja,
katso onko se tiedoston otsikko tai info otsikko, joka sisältää nämä tiedot
ja vaihda sitten tarpeen mukaan.
Jälleen, eli cp copy.c resize.c.
Tämä tarkoittaa, että resize.c sisältää nyt kaiken, mitä sisältämää kopio
koska kopio tarjoaa meille tapa perehtyä kunkin juova pikseli.
Paitsi nyt, eikä vain muuttaa arvoja kuten teimme jännäri,
mitä me haluamme tehdä, on haluamme kirjoittaa useita pikseleitä
niin kauan kuin meidän n on suurempi kuin 1.
>> Sitten mitä haluamme tehdä, on haluamme venyttää sitä vaakasuunnassa n,
sekä venyttää sitä pystysuunnassa n..
Miten voisi teemme tämän?
Sano n on 2 ja sinulla on antanut INFILE.
Kursori aikoo aloittaa ensimmäinen,
ja mitä haluat tehdä, jos n on 2, haluat tulostaa 2 niistä.
Joten te tulostaa 2 niistä.
Silloin kohdistin tulee siirtyä seuraavan pikselin, joka on punainen,
ja se tulee tulostaa 2 näitä punaisia, lisäämällä sen päälle, mitä se on tehnyt ennenkin.
Sitten kohdistin siirtyy seuraavaan pikselin ja piirtää 2 niistä.
Jos muistelen copy.c puitteissa, mitä tämä tekee täällä
on se luo uuden ilmentymän RGB kolminkertainen, uusi muuttuja nimeltä kolminkertainen.
Ja täällä kun se lukee siihen, se lukee INFILE 1 RGBTRIPLE
ja tallentaa sen sisällä että kolminkertainen muuttujan.
Joten sinulla oikeasti on muuttuja edustaa kyseisen pikselin.
Sitten kun kirjoittaa, mitä kannattaa tehdä, on koteloida fwrite lausuman varten silmukka
, joka kirjoittaa sen omaan outfile niin monta kertaa kuin on tarpeen.
Se on tarpeeksi yksinkertainen.
Vain pohjimmiltaan toista kirjoittamista n monta kertaa mittakaavassa se vaakasuoraan.
>> Mutta meidän on muistettava, että meidän täyte tulee muuttumaan.
Aiemmin sanoa meillä oli jotain pituus 3.
Sitten olisi vain lisätä kuinka paljon pehmuste? Vain yksi tehdä jaollinen 4.
Mutta sano me skaalaus tässä kuvaa n = 2.
Joten kuinka monta sinistä pikseliä meillä olisi lopussa? Meillä olisi 6.
1, 2, 3, 4, 5, 6. Selvä.
6 ei ole jaollinen 4. Mikä on lähimpään kerrannaiseen 4? Tämä tulee olemaan 8.
Joten olemme todella menossa on 2 merkkiä pehmuste siellä.
>> Muistaako kukaan, jos meillä on laskukaava pehmusteet
ja jos se voisi olla?
[Äänetön opiskelija vastausta] >> Joo, copy.c. Oikea.
On kaavan copy.c laskea kuinka paljon pehmuste olet
annetaan tietty leveys bittikarttakuvan.
Niin sitten se tulee olemaan hyödyllinen, kun haluat lisätä tietyn määrän pehmuste
todella selvittää, kuinka paljon pehmusteita sinun täytyy lisätä.
Mutta yksi nuotti, vaikka se, että haluat varmistaa, että käytät oikean koon.
Vain olla varovainen, koska olet periaatteessa tullaan käsittelemään kahta bittikarttakuvia.
Haluat varmistaa, että käytät oikea.
Kun olet laskettaessa pehmusteet outfile, jota haluat käyttää leveyden outfile
eikä leveyttä edelliseen.
>> Suuri. Tällainen huolehtii venyttely koko bittikarttakuvana vaakasuunnassa.
Mutta mitä me haluamme tehdä, on todella venyttää sitä vertikaalisesti.
Tämä tulee olemaan hieman hankalampaa, koska kun olemme kopioinut rivi
ja kirjallisesti rivi, meidän kohdistin tulee olemaan lopussa.
Joten jos luemme uudestaan, niin se vain menee lukea seuraavalle riville.
Joten mitä me haluamme tehdä, on eräänlainen löytää jokin tapa kopioida ne rivit uudelleen
tai vain sellainen kun rivin ja uudelleenkirjoitus uudelleen.
Kuten olen tavallaan viittasin, on olemassa useita eri tapoja tehdä tätä.
Mitä voisit tehdä, on niin olet menossa läpi ja lukemisen kautta erityisesti juova
ja muuttaa sitä tarvittaessa, niin sellainen myymälä kaikki nämä pikseliä array.
Sitten myöhemmin tiedät että sinun täytyy tulostaa että array jälleen
joten voit vain käyttää sitä array tehdä niin.
Toinen tapa tehdä se on voisit kopioida alas yhden rivin,
ymmärtää, että sinun täytyy kopioida sitä uudelleen, joten oikeastaan ​​siirrä kursori,
ja että tulee olemaan menetelmää fseek.
Voisit siirrät kohdistinta aina takaisin ja toista kopiointi uudelleen.
>> Joten jos meidän skaalaus numero on n, niin kuinka monta kertaa meillä olisi palattava
ja kirjoittaa linjan? >> [Opiskelija] n - 1. >> Joo, täydellinen. n - 1.
Olemme tehneet sen jo kerran, niin silloin me haluamme toistaa menee takaisin prosessiin
n - 1 määrä kertoja.
Okei. Joten sinulla on oma resize toimintoa.
>> Nyt voimme saada todella hauska osa, suosikkini PSET, mikä on Recover.
Sen sijaan bittikarttoja, tällä kertaa olemme tekemisissä JPEG.
Emme oikeastaan ​​ole antanut tiedostoa juuri ja JPEG,
me annetaan pohjimmiltaan raaka muistikortin.
Ja niin tämä on vähän tietoa ja roskat arvot alussa,
ja sitten se alkaa, ja se on joukko JPEG-tiedostoja.
Kuitenkin olemme ojensi kortin jossa olemme poistanut valokuvia;
olennaisesti, olemme unohtaneet, jossa kuvat sijaitsevat kortin.
Joten meidän tehtävä Recover on käydä läpi tämän kortin muodossa
ja löytää nuo kuvat uudelleen.
>> Onneksi rakenne JPEG-tiedostoja ja kortisto on vähän hyötyä.
Se varmasti voinut hieman hankalampaa, jos se ei tässä nimenomaisessa muodossa.
Jokainen JPEG oikeastaan ​​alkaa kaksi mahdollista sekvenssiä, edellä luetellut.
Periaatteessa aina kun on uusi JPEG,
se alkaa joko sekvenssin ffd8 ffe0 tai toinen, ffd8 ffe1.
Toinen hyödyllinen asia tietää, että JPEG tallennetaan vierekkäin.
Joten aina kun yksi JPEG tiedoston lopussa, toinen alkaa.
Joten ei ole minkäänlaista in-arvojen välisen siellä.
Kun osut alkuun JPEG, jos olet jo lukenut JPEG,
tiedät, että olet osuma päähän edellisen ja alusta seuraavaan.
>> Ikään kuin visualisoida tämän, tein kaavamainen.
Toinen asia JPEG on, että voimme lukea niitä sarjoja 512 tavua kerrallaan,
samalla tavoin alusta kortin.
Emme tarvitse tarkistaa jokaista tavu koska se imee.
Joten sen sijaan, mitä voimme tehdä, on oikeastaan ​​vain lukea 512 tavua kerrallaan
ja sitten vaan lähtöselvityksen välillä näiden pikku viipaleita,
voimme vain tarkistaa alussa 512 tavua.
Pohjimmiltaan tässä kuvassa, mitä näet on alussa kortin
sinulla on arvoja, jotka eivät ole oikeastaan ​​merkitystä varsinaisen JPEG itse.
Mutta mitä sitten minulla on tähti osoittaa toinen alkaa sekvenssit JPEG.
Joten kun näet tähti, tiedät, että sinulla on JPEG-tiedosto.
Ja sen jälkeen joka JPEG-tiedosto tulee olemaan joitakin useita 512 tavua
mutta ei välttämättä samoja useita.
Niin että tiedät, että olet osuma toisen JPEG jos osut toinen tähti,
toinen alkaa sekvenssin tavua.
Sitten mitä tässä on sinulla punainen JPEG jatkuu kunnes osut tähti,
joka on merkitty uuden värin.
Jatkat ja sitten lyödä toisen tähden, osut toiseen JPEG,
jatkat aina loppuun asti.
Olette viimeinen kuva täällä, pinkki.
Menet loppuun kunnes osut tiedoston loppuun luonnetta.
Tämä tulee olemaan todella hyödyllinen.
>> Muutaman tärkeimmät takeaways tässä:
Kortisto ei ala JPEG,
mutta kun JPEG alkaa, kaikki JPEG tallennetaan rinnakkain toisiinsa.
>> Jotkut pseudokoodi Palauta.
Ensinnäkin aiomme avata kortisto,
ja että tulee olemaan käyttämällä tiedoston I / O-toimintoja.
Menemme toistaa seuraavat prosessia kunnes olemme saavuttaneet tiedoston loppuun.
Aiomme lukea 512 tavua kerrallaan.
Ja mitä sanoin tässä me aiomme säilytä sitä puskuria,
joten periaatteessa pidä niitä 512 tavua kunnes tiedämme tarkalleen, mitä tehdä niiden kanssa.
Sitten mitä haluamme tehdä, on haluamme onko meillä osuma tähti vai ei.
Jos olemme osuma tähti, jos olemme osui yksi alkaa sekvenssien
tiedämme, että olemme osuma uusi JPEG-tiedosto.
Mitä me haluamme tehdä, on aiomme haluat luoda uuden tiedoston meidän pset4 hakemistossa
tehdä jatkossakin tiedoston.
Mutta myös, jos olemme jo tehneet JPEG ennen,
Sitten haluamme lopettaa kyseisen tiedoston ja työnnä se pset4 kansioon,
jossa meillä on, että tiedosto tallennetaan koska jos emme täsmentää, että olemme päätyneet että JPEG-tiedosto,
sitten me pohjimmiltaan on määrittelemätön määrä. JPEG lopu koskaan.
Joten haluamme varmistaa, että kun olemme lukemista ja JPEG ja kirjallisesti,
Haluamme nimenomaan sulkea että voidakseen avata seuraavaan.
Me haluamme tarkistaa useita asioita.
Haluamme tarkistaa, olemme alussa uuden JPEG meidän puskurilla
ja jos olemme jo löytäneet JPEG ennen
koska se muuttaa prosessia hieman.
Joten sitten kun olet läpi koko matkan ja osut tiedoston loppuun,
niin mitä sinun kannattaa tehdä, on sinun kannattaa sulkea kaikki tiedostot, jotka ovat tällä hetkellä auki.
Se on todennäköisesti viimeinen JPEG-tiedosto, joka sinulla on,
sekä kortisto, että olet ollut tekemisissä.
>> Viimeinen este, että meidän on puututtava, miten todella tehdä JPEG-tiedoston
ja kuinka todella työntää sen kansioon.
PSET edellyttää, että jokainen JPEG että löydät oltava seuraavassa muodossa,
jos sinulla on numero. jpg.
Numero, vaikka se on 0, kutsumme sitä 000.jpg.
Aina kun löytää JPEG oman ohjelman
olet menossa halua nimetä sitä jotta se löytyy.
Mitä tämä tarkoittaa?
Meidän eräänlainen seurata kuinka monta olemme löytäneet
ja mikä määrä kunkin JPEG pitäisi olla.
Täällä aiomme hyödyntää sprintf toiminnon.
Samanlaisia ​​printf, joka juuri sellainen tulostaa arvon ulos terminaalin
sprintf tulostaa tiedoston ulos kansioon.
Ja niin, mitä tämä tekisi, jos minulla olisi sprintf, otsikko, ja sitten merkkijono siellä,
se tulostaa 2.jpg.
Olettaen, että olen kiinni minun tiedostoja oikein,
jotka sisältävät tiedoston, että olen ollut kirjallisesti ulos.
Mutta yksi asia on, että koodi, että olen täällä
ei aivan täytä mitä PSET vaatii.
PSET edellyttää, että toinen JPEG-tiedosto tulee nimetä 002 sijasta 2.
Joten kun tulostaa nimen, niin ehkä sinun kannattaa muuttaa paikkamerkin hieman.
>> Muistaako kukaan kuinka mahdollistavat ylimääräisiä välilyöntejä kun painan jotain?
Joo. >> [Opiskelija] Laitat 3 välillä prosenttia merkin ja 2. >> Joo, täydellinen.
Voit laittaa 3 tässä tapauksessa, koska haluamme tilaa 3.
% 3d luultavasti antaa teille 002.jpg sijasta 2.
Ensimmäinen argumentti osaksi sprintf toiminto on todella char array,
jota aiemmin tiesimme merkkijonoina.
Nämä tahtoa, eräänlainen enemmän kuin väliaikainen varastointi, vain tallentaa tuloksena merkkijono.
Et todellakaan käsitellä tätä, mutta sinun täytyy sisällyttää sitä.
>> Tietäen, että jokainen tiedoston nimi on numero, joka vie kolme merkkiä,
ja sitten. jpg, kuinka kauan pitäisi tämä array olla?
Heitä numero. Kuinka monta merkkiä otsikossa, nimissä?
Joten on 3 hashtags, ajan, jpg. >> [Opiskelija] 7. >> 7. Ei aivan.
Aiomme haluta 8 koska haluamme mahdollistaa null terminaattori samoin.
>> Lopuksi vain vetää ulos prosessi, voit tehdä ja palauttaa,
sinulla on alussa tietoa.
Jatkat kunnes löydät alku JPEG-tiedoston,
ja joka voi olla joko yksi kaksi alkaa sekvenssejä.
Sinun pitää lukea. Jokainen slash täällä edustaa 512 tavua.
Voit pitää käsittelyssä, pitää lukemista kunnes kohtaat toisen käynnistysjakson.
Kun olet että, lopetat nykyisen JPEG - tässä tapauksessa se on punainen,
joten haluat lopettaa sitä.
Haluat sprintf nimen, joka omaan pset4 kansioon,
sitten haluat avata uuden JPEG ja sitten pitää käsittelyssä
kunnes kohtaat seuraavan.
Pidä käsittelyssä pitää käsittelyssä,
ja lopuksi, lopulta, olet menossa päähän tiedoston,
ja niin sinun kannattaa sulkea viimeistä JPEG että käytit,
sprintf että omaan pset4 kansioon, ja sitten katsoa kaikki kuvat, jotka olet saanut.
Nämä kuvat ovat todella kuvat CS50 henkilöstön
joten tämä on silloin bonus hauska osa PSET tulee
on, että olet kilpailevat Osioidesi löytää TF kuvat
ja ottaa kuvia niiden kanssa todistaa, että olet tehnyt PSET
ja niin näet johon toimihenkilöllä on kuvia.
Niin sitten otat kuvia henkilökunnan. Joskus sinun täytyy jahdata niitä alas.
Luultavasti jotkut heistä yrittävät paeta sinua.
Voit ottaa kuvia niistä.
Tämä on jatkuva. Se ei kanneta, jos PSET johtuu.
Määräaika ilmoitetaan spec.
Sitten yhdessä teidän §, kumpi jakso vie eniten kuvat
eniten henkilökunnan jäsenistä voittaa melko mahtava palkinto.
Sellainen kannustin saat pset4 valmiiksi mahdollisimman nopeasti
koska silloin voit saada alas liiketoiminnan
jahtaa kaikkien eri CS50 henkilökunnan jäsentä.
Se ei ole pakollista, vaikka, joten kun saat kuvia,
niin olet valmis pset4.
>> Ja olen valmis esittely 4, joten kiitos kun tulitte.
Onnea Forensics. [Aplodit]
[CS50.TV]