1 00:00:00,000 --> 00:00:09,500 >> [Musiikki soi] 2 00:00:09,500 --> 00:00:12,350 >> ZAMYLA Chan: Se oli Miss Scarlett kanssa kynttilänjalka. 3 00:00:12,350 --> 00:00:13,560 Dekkari? 4 00:00:13,560 --> 00:00:15,030 No, me aiomme selvittää. 5 00:00:15,030 --> 00:00:20,870 Vuonna lautapeli Clue, saatat annetaan fyysinen punainen kuva. 6 00:00:20,870 --> 00:00:24,120 Ja että kuva on hyvin punainen ja epätasainen, ja sinun tehtäväsi on 7 00:00:24,120 --> 00:00:25,490 paljastaa piilotetut viesti. 8 00:00:25,490 --> 00:00:29,740 Ja yleensä olet varustettu punainen suurennuslasi tai punainen näyttö 9 00:00:29,740 --> 00:00:31,410 paljastavat, että piilotettu viesti. 10 00:00:31,410 --> 00:00:33,340 No, me aiomme jäljitellä. 11 00:00:33,340 --> 00:00:37,960 >> Vuonna jännäri, olet antanut bittikarttakuvana joka näyttää hyvin epätasainen ja punainen, 12 00:00:37,960 --> 00:00:43,430 ja suorita jännäri ohjelman paljastaa piilotetut viesti. 13 00:00:43,430 --> 00:00:45,650 >> Joten rikkoa tätä vaiheisiin. 14 00:00:45,650 --> 00:00:50,390 Ensin kannattaa avata tiedoston - vihje siitä, että olet saanut. 15 00:00:50,390 --> 00:00:53,880 Ja sitten myös luoda Tuomio bittikarttatiedosto. 16 00:00:53,880 --> 00:00:58,240 Sitten haluat päivittää bittikartta header info tuomiota outfile. 17 00:00:58,240 --> 00:00:59,920 Siitä lisää myöhemmin. 18 00:00:59,920 --> 00:01:04,319 Ja sitten aiot lukea osaksi vihje, juova, pikseli kerrallaan, 19 00:01:04,319 --> 00:01:07,320 muuttamalla pikselin värit tarpeen, ja kirjoittaminen 20 00:01:07,320 --> 00:01:08,960 Niille tulee tuomio - 21 00:01:08,960 --> 00:01:12,000 pikseli kerrallaan osaksi Tuomio juova. 22 00:01:12,000 --> 00:01:13,780 >> Miten me aloittaa menee tästä? 23 00:01:13,780 --> 00:01:16,940 No, onneksi meillä on copy.c jakelussa koodin. 24 00:01:16,940 --> 00:01:21,240 Ja tämä tosiaankin varsin hyödyllinen meille. 25 00:01:21,240 --> 00:01:29,700 Copy.c avaa tiedoston, lukee, että infile otsikossa, ja päivittää sitten 26 00:01:29,700 --> 00:01:31,070 outfile otsikossa. 27 00:01:31,070 --> 00:01:37,010 Ja sitten se lukee jokaisen pikselin juova, pikseli kerrallaan, ja sitten 28 00:01:37,010 --> 00:01:42,390 kirjoittaa, että pikseli osaksi outfile. 29 00:01:42,390 --> 00:01:45,020 >> Joten, ensimmäinen askel voisi on suorittaa seuraavat 30 00:01:45,020 --> 00:01:46,420 komento terminaali - 31 00:01:46,420 --> 00:01:50,270 cp copy.c whodunit.c. 32 00:01:50,270 --> 00:01:55,320 Tämä luo kopion copy.c nimetty whodunit.c. 33 00:01:55,320 --> 00:01:58,320 Joten meidän ensimmäinen askel avaa tiedosto, hyvin, siellä on tarkka 34 00:01:58,320 --> 00:02:00,070 kopio, että copy.c. 35 00:02:00,070 --> 00:02:03,360 Joten jätän sinut katsomaan sitä. 36 00:02:03,360 --> 00:02:07,860 >> Mitä olemme tekemisissä tässä PSET on tiedoston I / O, pohjimmiltaan ottaen kuvaa, 37 00:02:07,860 --> 00:02:10,229 lukeminen, kirjoittaminen, muokata niitä. 38 00:02:10,229 --> 00:02:12,650 Miten ensin avata tiedoston? 39 00:02:12,650 --> 00:02:16,800 No, olet menossa julistaa tiedosto osoitinta ja soitat 40 00:02:16,800 --> 00:02:18,670 Tehtävä fopen. 41 00:02:18,670 --> 00:02:23,150 Kulkea polkua tai nimi, joka tiedostoon, ja sitten moodi, jonka haluat 42 00:02:23,150 --> 00:02:24,700 avata tiedoston sisään 43 00:02:24,700 --> 00:02:28,620 Ohimennen r avautuu foo.bmp lukemiseen. 44 00:02:28,620 --> 00:02:35,670 Ottaa huomioon, että fopen kanssa ohimennen w tulee avoin bar.bmp, kirjoittaa tiedoston ja 45 00:02:35,670 --> 00:02:37,020 itse muokkaamalla sitä. 46 00:02:37,020 --> 00:02:41,970 >> Joten nyt olemme avannut tiedoston, meidän Seuraava askel on päivittää otsikon info 47 00:02:41,970 --> 00:02:43,230 varten outfile. 48 00:02:43,230 --> 00:02:44,610 Mikä header tiedot? 49 00:02:44,610 --> 00:02:48,160 No, ensin meidän täytyy tietää mikä bittikartta on. 50 00:02:48,160 --> 00:02:51,000 Bittikartta on vain yksinkertainen järjestely tavua. 51 00:02:51,000 --> 00:02:55,480 Ja he ilmoitetut tätä kuvaa täällä, bmp.h, jossa joukko 52 00:02:55,480 --> 00:02:58,610 tietoa siitä, mitä bittikartta on todella tehty pois. 53 00:02:58,610 --> 00:03:05,730 Mutta mitä me oikeastaan ​​välitä on Bittikarttatiedosto otsikon, täällä, ja 54 00:03:05,730 --> 00:03:08,460 bittikartta info otsikon tänne. 55 00:03:08,460 --> 00:03:13,170 Header koostuu pari muuttujia, jotka osoittautuvat erittäin hyödyllistä. 56 00:03:13,170 --> 00:03:18,400 On biSizeImage, joka on yhteensä kuvan kokoa tavuina. 57 00:03:18,400 --> 00:03:20,890 Ja tämä sisältää pikseliä ja pehmusteet. 58 00:03:20,890 --> 00:03:24,210 Padding on erittäin tärkeää, mutta me saamme myöhemmin. 59 00:03:24,210 --> 00:03:30,000 >> BiWidth edustaa leveyttä kuvan pikseleinä miinus täyte. 60 00:03:30,000 --> 00:03:34,220 BiHeight on sitten myös korkeus kuvan pikseleinä. 61 00:03:34,220 --> 00:03:38,240 Ja sitten BITMAPFILEHEADER ja BITMAPINFOHEADER, kuten mainitsin 62 00:03:38,240 --> 00:03:40,900 aiemmin, nämä ovat edustettuina kuten structs. 63 00:03:40,900 --> 00:03:45,410 Joten, et voi käyttää tiedoston otsikko itse, mutta sinun kannattaa päästä 64 00:03:45,410 --> 00:03:47,370 nämä muuttujat sisällä. 65 00:03:47,370 --> 00:03:48,170 >> OK. 66 00:03:48,170 --> 00:03:50,600 Miten siis päivittää header tiedot? 67 00:03:50,600 --> 00:03:54,020 No, ensin meidän täytyy nähdä, onko meillä tarvitse muuttaa mitään tietoja 68 00:03:54,020 --> 00:03:58,480 infile, vihje, jotta outfile, tuomion. 69 00:03:58,480 --> 00:04:00,250 Onko mitään muuttuvat tässä tapauksessa? 70 00:04:00,250 --> 00:04:04,320 No, ei oikeastaan, koska olemme menossa on vain muuttamalla väriä. 71 00:04:04,320 --> 00:04:07,550 Emme aio muuttuvan tiedosto koko, kuvan koko, leveys, 72 00:04:07,550 --> 00:04:08,310 tai korkeus. 73 00:04:08,310 --> 00:04:14,010 Joten olet kunnossa nyt by vain kopioimalla jokainen pikseli. 74 00:04:14,010 --> 00:04:14,840 >> OK. 75 00:04:14,840 --> 00:04:20,720 Joten nyt Katsotaanpa, miten me oikeastaan voi lukea jokaisen pikselin tiedostosta. 76 00:04:20,720 --> 00:04:23,640 Toinen tiedoston I / O-toiminto tulevat peliin - 77 00:04:23,640 --> 00:04:24,700 fread. 78 00:04:24,700 --> 00:04:28,440 Se vie osoitin struct joka sisältää tavujen 79 00:04:28,440 --> 00:04:30,110 luet. 80 00:04:30,110 --> 00:04:31,890 Joten luet tuohon. 81 00:04:31,890 --> 00:04:36,090 Ja sitten ohitat koossa, joka on koko jokaisen osa, jota 82 00:04:36,090 --> 00:04:37,360 haluat lukea. 83 00:04:37,360 --> 00:04:40,640 Tässä toiminto sizeof tulee kätevä. 84 00:04:40,640 --> 00:04:45,570 Sitten ohitat määrä, joka edustaa useita elementtejä 85 00:04:45,570 --> 00:04:47,480 koon lukea. 86 00:04:47,480 --> 00:04:51,180 Ja sitten lopuksi, inptr, joka on tiedoston osoitin, että olet 87 00:04:51,180 --> 00:04:52,530 menossa lukea. 88 00:04:52,530 --> 00:04:58,650 Joten kaikki nämä elementit ovat sisäpuolella inptr ja he aikovat tietoja. 89 00:04:58,650 --> 00:05:01,660 >> Katsotaanpa hieman esimerkki. 90 00:05:01,660 --> 00:05:07,590 Jos haluan lukea dataksi kaksi koiraa, No, voin tehdä sen kahdella tavalla. 91 00:05:07,590 --> 00:05:15,250 Voin joko lukea kaksi objektia koosta koira minun inptr, tai voin lukea 92 00:05:15,250 --> 00:05:19,280 yksi esine koko kaksi koiraa. 93 00:05:19,280 --> 00:05:23,580 Niin näet, että riippuen tavasta että voit järjestää koko ja määrä, voit 94 00:05:23,580 --> 00:05:25,840 voi lukea saman määrän tavuja. 95 00:05:25,840 --> 00:05:28,720 96 00:05:28,720 --> 00:05:33,020 >> Joten nyt, nyt muuttaa pikselin väri kuin tarvitsemme. 97 00:05:33,020 --> 00:05:37,320 Jos tarkastellaan bmp.h uudelleen, sitten näet, että alareunassa 98 00:05:37,320 --> 00:05:42,920 RGBTRIPLEs ovat toinen struct, jossa ne koostuvat kolme tavua. 99 00:05:42,920 --> 00:05:49,220 Yksi, rgbtBlue, rgbtGreen, ja rgbtRed. 100 00:05:49,220 --> 00:05:52,480 Joten jokainen näistä edustaa määrää sininen, vihreän määrää, ja 101 00:05:52,480 --> 00:05:57,250 punaisten sisälle pikseli, jossa Kunkin määrä edustaa 102 00:05:57,250 --> 00:05:58,670 heksadesimaalinumero. 103 00:05:58,670 --> 00:06:04,370 >> Joten ff0000 on sininen väri, koska se menee sininen, 104 00:06:04,370 --> 00:06:05,850 vihreäksi, punaiseksi. 105 00:06:05,850 --> 00:06:09,300 Ja sitten kaikki f: n on valkoinen. 106 00:06:09,300 --> 00:06:13,440 Katsotaanpa katsomaan smiley.bmp, joka sinulla on jakelun koodin. 107 00:06:13,440 --> 00:06:15,690 Jos avaat sen vain kuva katsoja? Tulet 108 00:06:15,690 --> 00:06:17,080 vain nähdä punaisen hymiö. 109 00:06:17,080 --> 00:06:20,380 Mutta ottaen syvempi sukellus, näytämme nähdä, että rakenne 110 00:06:20,380 --> 00:06:22,340 se on vain pikseliä. 111 00:06:22,340 --> 00:06:25,880 Meillä on valkoinen pikseliä, ja sitten punaista pikseliä. 112 00:06:25,880 --> 00:06:31,000 Valkoinen, ffffff, ja sitten kaikki punainen pikseliä Olen väritetty sinulle 113 00:06:31,000 --> 00:06:35,440 täällä, ja näet, että he 0000FF. 114 00:06:35,440 --> 00:06:39,760 Nolla sininen, nolla vihreä ja täynnä punaiset. 115 00:06:39,760 --> 00:06:45,350 Ja koska hymiö on kahdeksan pikseliä leveä, meillä ei ole mitään täyte. 116 00:06:45,350 --> 00:06:47,360 Selvä. 117 00:06:47,360 --> 00:06:53,310 >> Joten jos olisin määrittää eri arvoja to RGBTRIPLE ja halusin 118 00:06:53,310 --> 00:06:58,350 jotta se vihreä, niin mitä tekisin on Haluan julistaa RGBTRIPLE, nimeltään 119 00:06:58,350 --> 00:07:02,660 kolminkertainen, ja sitten käyttää joka tavun että struct I 120 00:07:02,660 --> 00:07:04,030 käyttäisi piste operaattori. 121 00:07:04,030 --> 00:07:08,430 Joten triple.rgbtBlue, voin määrittää, että 0. 122 00:07:08,430 --> 00:07:13,460 Vihreä voin määrittää sen täyteen - kaikki numero, todella, välillä 0 ja FF. 123 00:07:13,460 --> 00:07:15,470 Ja sitten punainen, olen myös menossa sanoa 0. 124 00:07:15,470 --> 00:07:19,160 Joten sitten, että antaa minulle vihreä pikseli. 125 00:07:19,160 --> 00:07:23,030 >> Seuraava, mitä jos haluan tarkistaa arvo jotain? 126 00:07:23,030 --> 00:07:27,250 Voisin olla jotain, joka tarkistaa onko triple n rgbtBlue arvo on 127 00:07:27,250 --> 00:07:31,080 ff ja sitten tulostaa, "En tunne sininen! ", seurauksena. 128 00:07:31,080 --> 00:07:35,640 Nyt, se ei välttämättä tarkoita että pikseli on sininen, eikö? 129 00:07:35,640 --> 00:07:40,060 Koska pikselin vihreä ja punainen arvot voisi olla myös ei-0-arvot. 130 00:07:40,060 --> 00:07:43,470 Kaikki tämä tarkoittaa, ja kaikki tämä on tarkistanut on 131 00:07:43,470 --> 00:07:45,610 täyden sininen väri. 132 00:07:45,610 --> 00:07:50,050 Mutta kaikki pikselit voisi olla myös osittainen väriarvot, kuten tämä 133 00:07:50,050 --> 00:07:52,180 Seuraava esimerkki tästä. 134 00:07:52,180 --> 00:07:55,400 >> Se on vähän vaikeampi nähdä mitä tämä kuva on nyt. 135 00:07:55,400 --> 00:08:00,320 Tämä näyttää hieman enemmän kuin clue.bmp että sinulle annetaan. 136 00:08:00,320 --> 00:08:03,600 Nyt, fyysisesti, saatat ratkaista tämän, koska siellä on paljon punaista, jonka 137 00:08:03,600 --> 00:08:07,040 pintansa punainen näytön kuvan niin että muut värit voivat näkyä. 138 00:08:07,040 --> 00:08:10,968 Miten siis jäljitellä tätä C? 139 00:08:10,968 --> 00:08:15,640 No, voisimme poista kaikki punaiset kokonaan kuvasta. 140 00:08:15,640 --> 00:08:21,870 Ja niin tehdä, että olisimme asettavat kukin pikselin punainen arvoksi 0. 141 00:08:21,870 --> 00:08:25,020 Ja niin kuva näyttäisi hieman vähän kuin tämä, jossa meillä ei punaista 142 00:08:25,020 --> 00:08:26,300 mitään. 143 00:08:26,300 --> 00:08:29,390 >> Voimme nähdä piilotettu viesti hieman selvemmin nyt. 144 00:08:29,390 --> 00:08:31,730 Se on toinen hymiö kasvot. 145 00:08:31,730 --> 00:08:33,870 Tai ehkä voisimme käyttää toista menetelmää. 146 00:08:33,870 --> 00:08:36,480 Ehkä voisimme tunnistaa kaikki punaiset pikseliä - 147 00:08:36,480 --> 00:08:41,100 se on, kaikki pikseliä 0 sininen, 0 vihreä, ja 0 punainen - 148 00:08:41,100 --> 00:08:43,169 ja muuttaa niitä valkoiseksi. 149 00:08:43,169 --> 00:08:45,470 Ja kuva saattaa näyttää jotain tällaista. 150 00:08:45,470 --> 00:08:48,250 Hieman helpompi nähdä. 151 00:08:48,250 --> 00:08:51,170 >> On olemassa paljon muita tapoja paljastaa salainen viesti samoin, 152 00:08:51,170 --> 00:08:53,730 käsittelevät väri manipulointia. 153 00:08:53,730 --> 00:08:57,050 Ehkä voisit käyttää yksi menetelmistä että edellä mainitsin. 154 00:08:57,050 --> 00:08:59,600 Ja lisäksi kannattaa parantaa jotkut värit 155 00:08:59,600 --> 00:09:02,620 ja tuoda ne pois. 156 00:09:02,620 --> 00:09:06,190 >> Joten nyt olemme muuttaneet pikselin väri, seuraavaksi meidän täytyy vain kirjoittaa ne 157 00:09:06,190 --> 00:09:08,500 sisään juova, pikseli kerrallaan. 158 00:09:08,500 --> 00:09:11,860 Ja jälleen kerran, sinun kannattaa katsoa taaksepäin to copy.c, jos et ole kopioinut 159 00:09:11,860 --> 00:09:18,170 sen jo, ja katso fwrite funktio, joka vie tietoa, osoitin 160 00:09:18,170 --> 00:09:23,230 to struct joka sisältää tavut että luet päässä, koko 161 00:09:23,230 --> 00:09:26,610 eriä, kappalemäärä, ja sitten outptr - 162 00:09:26,610 --> 00:09:29,450 määränpää kyseiset tiedostot. 163 00:09:29,450 --> 00:09:34,010 >> Kun kirjoitat pikseliä, sinun myös kirjoittaa täyte. 164 00:09:34,010 --> 00:09:34,970 Mikä on täyte? 165 00:09:34,970 --> 00:09:38,670 No, jokainen rgbt pikseli on kolme tavua pitkä. 166 00:09:38,670 --> 00:09:43,670 Mutta, juova varten bittikarttakuvana on oltava useita neljä tavua. 167 00:09:43,670 --> 00:09:47,650 Ja jos pikselien määrä ei ole Useiden neljä, sitten meidän täytyy lisätä 168 00:09:47,650 --> 00:09:48,880 Tämä täyte. 169 00:09:48,880 --> 00:09:51,420 Täyte on vain edustaa 0s. 170 00:09:51,420 --> 00:09:54,380 Joten, miten voimme kirjoittaa tai lukea tämän? 171 00:09:54,380 --> 00:09:59,280 No, käy ilmi, että et voi todella fread täyte, mutta voit 172 00:09:59,280 --> 00:10:00,970 laskea sitä. 173 00:10:00,970 --> 00:10:04,400 >> Tässä tapauksessa vihjeen ja tuomio leveys on sama, joten 174 00:10:04,400 --> 00:10:05,910 pehmuste on sama. 175 00:10:05,910 --> 00:10:09,370 Ja täyte, kuten näet vuonna copy.c, lasketaan 176 00:10:09,370 --> 00:10:11,790 kanssa alla kaava - 177 00:10:11,790 --> 00:10:16,690 bi.biWidth kertaa sizeof (RGBTRIPLE) tulee antaa meille kuinka monta tavua bmp 178 00:10:16,690 --> 00:10:18,280 on jokaisella rivillä. 179 00:10:18,280 --> 00:10:21,890 Sieltä modulos ja vähennyksiä 4 voi laskea, kuinka 180 00:10:21,890 --> 00:10:25,610 monta tavua on lisättävä niin, että monikerta tavua 181 00:10:25,610 --> 00:10:27,250 jokaisella rivillä on neljä. 182 00:10:27,250 --> 00:10:30,490 >> Nyt kun meillä on kaava kuinka paljon täyte tarvitsemme nyt 183 00:10:30,490 --> 00:10:31,610 voimme kirjoittaa sen. 184 00:10:31,610 --> 00:10:34,080 Nyt aiemmin mainitsin, täyte on vain 0s. 185 00:10:34,080 --> 00:10:39,730 Niin siinä tapauksessa, me vain laskemisesta char, tässä tapauksessa 0, meidän 186 00:10:39,730 --> 00:10:41,710 outptr - meidän outfile. 187 00:10:41,710 --> 00:10:47,530 Niin, että voi vain olla fputc 0, pilkku outptr. 188 00:10:47,530 --> 00:10:52,400 >> Joten, kun olemme lukeneet meidän tiedosto, tiedoston I / O on pitänyt kirjaa meidän 189 00:10:52,400 --> 00:10:57,440 aseman tiedostot jotain nimeltään tiedosto asennonosoittimen. 190 00:10:57,440 --> 00:10:59,350 Ajattele sitä kohdistin. 191 00:10:59,350 --> 00:11:03,550 Periaatteessa se etenee joka kerta että me fread, mutta meillä on 192 00:11:03,550 --> 00:11:05,671 valvoa sen myös. 193 00:11:05,671 --> 00:11:11,030 >> Siirtää tiedoston asennonosoitin, voit käyttää toimintoa fseek. 194 00:11:11,030 --> 00:11:15,600 Jos inptr edustaa tiedosto osoitin, että haet vuonna, 195 00:11:15,600 --> 00:11:20,370 määrä on tavujen että olet haluat siirtää kursoria, ja sitten 196 00:11:20,370 --> 00:11:23,470 liittyy vertailupisteen mistä hiiren kursori on. 197 00:11:23,470 --> 00:11:26,770 Jos ohitat SEEK_CUR, että edustaa nykyinen 198 00:11:26,770 --> 00:11:28,100 asema tiedoston. 199 00:11:28,100 --> 00:11:31,020 Tai voit käyttää joitakin muita parametrejä. 200 00:11:31,020 --> 00:11:35,400 Joten meidän kannattaa käyttää fseek ohittaa yli täytteestä tiedostoon. 201 00:11:35,400 --> 00:11:39,410 Ja vielä, jos olet jumissa, siellä Esimerkkinä, että copy.c. 202 00:11:39,410 --> 00:11:43,260 >> Joten nyt olemme avannut tiedoston, vihje, ja tuomio. 203 00:11:43,260 --> 00:11:46,450 Olemme päivittäneet otsikon info meidän tuomiosta, koska jokainen 204 00:11:46,450 --> 00:11:48,730 bittikartta tarvitsee otsikko. 205 00:11:48,730 --> 00:11:52,280 Olemme sitten lukea osaksi hajuakaan n juova, pikseli kerrallaan, muuttuvat 206 00:11:52,280 --> 00:11:55,210 jokainen väri tarpeen mukaan, ja kirjoittamisen osaksi 207 00:11:55,210 --> 00:11:57,340 tuomiosta, pikseli kerrallaan. 208 00:11:57,340 --> 00:12:01,550 Kun avaat tuomiosta, näet, kuka syyllinen, tai mitä salaisuus 209 00:12:01,550 --> 00:12:02,850 viesti on. 210 00:12:02,850 --> 00:12:05,550 Nimeni on Zamyla, ja tämä oli jännäri. 211 00:12:05,550 --> 00:12:12,864