>> [Musiikki soi]
>> ZAMYLA Chan: Se oli Miss Scarlett kanssa kynttilänjalka.
Dekkari?
No, me aiomme selvittää.
Vuonna lautapeli Clue, saatat annetaan fyysinen punainen kuva.
Ja että kuva on hyvin punainen ja epätasainen, ja sinun tehtäväsi on
paljastaa piilotetut viesti.
Ja yleensä olet varustettu punainen suurennuslasi tai punainen näyttö
paljastavat, että piilotettu viesti.
No, me aiomme jäljitellä.
>> Vuonna jännäri, olet antanut bittikarttakuvana joka näyttää hyvin epätasainen ja punainen,
ja suorita jännäri ohjelman paljastaa piilotetut viesti.
>> Joten rikkoa tätä vaiheisiin.
Ensin kannattaa avata tiedoston - vihje siitä, että olet saanut.
Ja sitten myös luoda Tuomio bittikarttatiedosto.
Sitten haluat päivittää bittikartta header info tuomiota outfile.
Siitä lisää myöhemmin.
Ja sitten aiot lukea osaksi vihje, juova, pikseli kerrallaan,
muuttamalla pikselin värit tarpeen, ja kirjoittaminen
Niille tulee tuomio -
pikseli kerrallaan osaksi Tuomio juova.
>> Miten me aloittaa menee tästä?
No, onneksi meillä on copy.c jakelussa koodin.
Ja tämä tosiaankin varsin hyödyllinen meille.
Copy.c avaa tiedoston, lukee, että infile otsikossa, ja päivittää sitten
outfile otsikossa.
Ja sitten se lukee jokaisen pikselin juova, pikseli kerrallaan, ja sitten
kirjoittaa, että pikseli osaksi outfile.
>> Joten, ensimmäinen askel voisi on suorittaa seuraavat
komento terminaali -
cp copy.c whodunit.c.
Tämä luo kopion copy.c nimetty whodunit.c.
Joten meidän ensimmäinen askel avaa tiedosto, hyvin, siellä on tarkka
kopio, että copy.c.
Joten jätän sinut katsomaan sitä.
>> Mitä olemme tekemisissä tässä PSET on tiedoston I / O, pohjimmiltaan ottaen kuvaa,
lukeminen, kirjoittaminen, muokata niitä.
Miten ensin avata tiedoston?
No, olet menossa julistaa tiedosto osoitinta ja soitat
Tehtävä fopen.
Kulkea polkua tai nimi, joka tiedostoon, ja sitten moodi, jonka haluat
avata tiedoston sisään
Ohimennen r avautuu foo.bmp lukemiseen.
Ottaa huomioon, että fopen kanssa ohimennen w tulee avoin bar.bmp, kirjoittaa tiedoston ja
itse muokkaamalla sitä.
>> Joten nyt olemme avannut tiedoston, meidän Seuraava askel on päivittää otsikon info
varten outfile.
Mikä header tiedot?
No, ensin meidän täytyy tietää mikä bittikartta on.
Bittikartta on vain yksinkertainen järjestely tavua.
Ja he ilmoitetut tätä kuvaa täällä, bmp.h, jossa joukko
tietoa siitä, mitä bittikartta on todella tehty pois.
Mutta mitä me oikeastaan ​​välitä on Bittikarttatiedosto otsikon, täällä, ja
bittikartta info otsikon tänne.
Header koostuu pari muuttujia, jotka osoittautuvat erittäin hyödyllistä.
On biSizeImage, joka on yhteensä kuvan kokoa tavuina.
Ja tämä sisältää pikseliä ja pehmusteet.
Padding on erittäin tärkeää, mutta me saamme myöhemmin.
>> BiWidth edustaa leveyttä kuvan pikseleinä miinus täyte.
BiHeight on sitten myös korkeus kuvan pikseleinä.
Ja sitten BITMAPFILEHEADER ja BITMAPINFOHEADER, kuten mainitsin
aiemmin, nämä ovat edustettuina kuten structs.
Joten, et voi käyttää tiedoston otsikko itse, mutta sinun kannattaa päästä
nämä muuttujat sisällä.
>> OK.
Miten siis päivittää header tiedot?
No, ensin meidän täytyy nähdä, onko meillä tarvitse muuttaa mitään tietoja
infile, vihje, jotta outfile, tuomion.
Onko mitään muuttuvat tässä tapauksessa?
No, ei oikeastaan, koska olemme menossa on vain muuttamalla väriä.
Emme aio muuttuvan tiedosto koko, kuvan koko, leveys,
tai korkeus.
Joten olet kunnossa nyt by vain kopioimalla jokainen pikseli.
>> OK.
Joten nyt Katsotaanpa, miten me oikeastaan voi lukea jokaisen pikselin tiedostosta.
Toinen tiedoston I / O-toiminto tulevat peliin -
fread.
Se vie osoitin struct joka sisältää tavujen
luet.
Joten luet tuohon.
Ja sitten ohitat koossa, joka on koko jokaisen osa, jota
haluat lukea.
Tässä toiminto sizeof tulee kätevä.
Sitten ohitat määrä, joka edustaa useita elementtejä
koon lukea.
Ja sitten lopuksi, inptr, joka on tiedoston osoitin, että olet
menossa lukea.
Joten kaikki nämä elementit ovat sisäpuolella inptr ja he aikovat tietoja.
>> Katsotaanpa hieman esimerkki.
Jos haluan lukea dataksi kaksi koiraa, No, voin tehdä sen kahdella tavalla.
Voin joko lukea kaksi objektia koosta koira minun inptr, tai voin lukea
yksi esine koko kaksi koiraa.
Niin näet, että riippuen tavasta että voit järjestää koko ja määrä, voit
voi lukea saman määrän tavuja.
>> Joten nyt, nyt muuttaa pikselin väri kuin tarvitsemme.
Jos tarkastellaan bmp.h uudelleen, sitten näet, että alareunassa
RGBTRIPLEs ovat toinen struct, jossa ne koostuvat kolme tavua.
Yksi, rgbtBlue, rgbtGreen, ja rgbtRed.
Joten jokainen näistä edustaa määrää sininen, vihreän määrää, ja
punaisten sisälle pikseli, jossa Kunkin määrä edustaa
heksadesimaalinumero.
>> Joten ff0000 on sininen väri, koska se menee sininen,
vihreäksi, punaiseksi.
Ja sitten kaikki f: n on valkoinen.
Katsotaanpa katsomaan smiley.bmp, joka sinulla on jakelun koodin.
Jos avaat sen vain kuva katsoja? Tulet
vain nähdä punaisen hymiö.
Mutta ottaen syvempi sukellus, näytämme nähdä, että rakenne
se on vain pikseliä.
Meillä on valkoinen pikseliä, ja sitten punaista pikseliä.
Valkoinen, ffffff, ja sitten kaikki punainen pikseliä Olen väritetty sinulle
täällä, ja näet, että he 0000FF.
Nolla sininen, nolla vihreä ja täynnä punaiset.
Ja koska hymiö on kahdeksan pikseliä leveä, meillä ei ole mitään täyte.
Selvä.
>> Joten jos olisin määrittää eri arvoja to RGBTRIPLE ja halusin
jotta se vihreä, niin mitä tekisin on Haluan julistaa RGBTRIPLE, nimeltään
kolminkertainen, ja sitten käyttää joka tavun että struct I
käyttäisi piste operaattori.
Joten triple.rgbtBlue, voin määrittää, että 0.
Vihreä voin määrittää sen täyteen - kaikki numero, todella, välillä 0 ja FF.
Ja sitten punainen, olen myös menossa sanoa 0.
Joten sitten, että antaa minulle vihreä pikseli.
>> Seuraava, mitä jos haluan tarkistaa arvo jotain?
Voisin olla jotain, joka tarkistaa onko triple n rgbtBlue arvo on
ff ja sitten tulostaa, "En tunne sininen! ", seurauksena.
Nyt, se ei välttämättä tarkoita että pikseli on sininen, eikö?
Koska pikselin vihreä ja punainen arvot voisi olla myös ei-0-arvot.
Kaikki tämä tarkoittaa, ja kaikki tämä on tarkistanut on
täyden sininen väri.
Mutta kaikki pikselit voisi olla myös osittainen väriarvot, kuten tämä
Seuraava esimerkki tästä.
>> Se on vähän vaikeampi nähdä mitä tämä kuva on nyt.
Tämä näyttää hieman enemmän kuin clue.bmp että sinulle annetaan.
Nyt, fyysisesti, saatat ratkaista tämän, koska siellä on paljon punaista, jonka
pintansa punainen näytön kuvan niin että muut värit voivat näkyä.
Miten siis jäljitellä tätä C?
No, voisimme poista kaikki punaiset kokonaan kuvasta.
Ja niin tehdä, että olisimme asettavat kukin pikselin punainen arvoksi 0.
Ja niin kuva näyttäisi hieman vähän kuin tämä, jossa meillä ei punaista
mitään.
>> Voimme nähdä piilotettu viesti hieman selvemmin nyt.
Se on toinen hymiö kasvot.
Tai ehkä voisimme käyttää toista menetelmää.
Ehkä voisimme tunnistaa kaikki punaiset pikseliä -
se on, kaikki pikseliä 0 sininen, 0 vihreä, ja 0 punainen -
ja muuttaa niitä valkoiseksi.
Ja kuva saattaa näyttää jotain tällaista.
Hieman helpompi nähdä.
>> On olemassa paljon muita tapoja paljastaa salainen viesti samoin,
käsittelevät väri manipulointia.
Ehkä voisit käyttää yksi menetelmistä että edellä mainitsin.
Ja lisäksi kannattaa parantaa jotkut värit
ja tuoda ne pois.
>> Joten nyt olemme muuttaneet pikselin väri, seuraavaksi meidän täytyy vain kirjoittaa ne
sisään juova, pikseli kerrallaan.
Ja jälleen kerran, sinun kannattaa katsoa taaksepäin to copy.c, jos et ole kopioinut
sen jo, ja katso fwrite funktio, joka vie tietoa, osoitin
to struct joka sisältää tavut että luet päässä, koko
eriä, kappalemäärä, ja sitten outptr -
määränpää kyseiset tiedostot.
>> Kun kirjoitat pikseliä, sinun myös kirjoittaa täyte.
Mikä on täyte?
No, jokainen rgbt pikseli on kolme tavua pitkä.
Mutta, juova varten bittikarttakuvana on oltava useita neljä tavua.
Ja jos pikselien määrä ei ole Useiden neljä, sitten meidän täytyy lisätä
Tämä täyte.
Täyte on vain edustaa 0s.
Joten, miten voimme kirjoittaa tai lukea tämän?
No, käy ilmi, että et voi todella fread täyte, mutta voit
laskea sitä.
>> Tässä tapauksessa vihjeen ja tuomio leveys on sama, joten
pehmuste on sama.
Ja täyte, kuten näet vuonna copy.c, lasketaan
kanssa alla kaava -
bi.biWidth kertaa sizeof (RGBTRIPLE) tulee antaa meille kuinka monta tavua bmp
on jokaisella rivillä.
Sieltä modulos ja vähennyksiä 4 voi laskea, kuinka
monta tavua on lisättävä niin, että monikerta tavua
jokaisella rivillä on neljä.
>> Nyt kun meillä on kaava kuinka paljon täyte tarvitsemme nyt
voimme kirjoittaa sen.
Nyt aiemmin mainitsin, täyte on vain 0s.
Niin siinä tapauksessa, me vain laskemisesta char, tässä tapauksessa 0, meidän
outptr - meidän outfile.
Niin, että voi vain olla fputc 0, pilkku outptr.
>> Joten, kun olemme lukeneet meidän tiedosto, tiedoston I / O on pitänyt kirjaa meidän
aseman tiedostot jotain nimeltään tiedosto asennonosoittimen.
Ajattele sitä kohdistin.
Periaatteessa se etenee joka kerta että me fread, mutta meillä on
valvoa sen myös.
>> Siirtää tiedoston asennonosoitin, voit käyttää toimintoa fseek.
Jos inptr edustaa tiedosto osoitin, että haet vuonna,
määrä on tavujen että olet haluat siirtää kursoria, ja sitten
liittyy vertailupisteen mistä hiiren kursori on.
Jos ohitat SEEK_CUR, että edustaa nykyinen
asema tiedoston.
Tai voit käyttää joitakin muita parametrejä.
Joten meidän kannattaa käyttää fseek ohittaa yli täytteestä tiedostoon.
Ja vielä, jos olet jumissa, siellä Esimerkkinä, että copy.c.
>> Joten nyt olemme avannut tiedoston, vihje, ja tuomio.
Olemme päivittäneet otsikon info meidän tuomiosta, koska jokainen
bittikartta tarvitsee otsikko.
Olemme sitten lukea osaksi hajuakaan n juova, pikseli kerrallaan, muuttuvat
jokainen väri tarpeen mukaan, ja kirjoittamisen osaksi
tuomiosta, pikseli kerrallaan.
Kun avaat tuomiosta, näet, kuka syyllinen, tai mitä salaisuus
viesti on.
Nimeni on Zamyla, ja tämä oli jännäri.