>> [Mūzikas atskaņošanai]
>> ZAMYLA Chan: Tā bija Miss Scarlett ar svečturis.
Detektīvromāns?
Nu, mēs ejam, lai uzzinātu.
Jo galda spēle Clue, jūs varētu jāpiešķir fiziska sarkanu attēlu.
Un tas tēls ir ļoti sarkana un plankumains, un jūsu uzdevums ir
atklāt slēptās ziņu.
Un parasti jūs nodrošina ar sarkanu lupas vai sarkano ekrāna
atklāj, ka slēptās ziņu.
Nu, mēs ejam, lai atdarinātu to.
>> In detektīvromāns, jūs esat dota bitkartes attēlu kas izskatās ļoti plankumains un sarkans,
un pēc tam palaist detektīvromāns programmu atklāt apslēpto vēstījumu.
>> Tā ļauj lauzt to vērā posmos.
Pirmkārt, jūs vēlaties, lai atvērtu failu - pavediens, ka jums ir dota.
Un tad arī izveidot spriedums bitkartes failu.
Tad jūs vēlaties, lai atjauninātu bitmap header info par spriedumu OUTFILE.
Vairāk par šo vēlāk.
Un tad jūs gatavojas lasīt par pavediens, scanline, pixel by pixel,
mainot pikseļu krāsas kā nepieciešams, un rakstīšana
tos uz spriedumu -
pixel by pixel par spriedums scanline.
>> Kā mēs sākam iet par šo?
Nu, par laimi, mums ir copy.c izplatīšanas kodu.
Un tas notiek, lai pierādītu ļoti noderīga, lai mums.
Copy.c atver failu, skan, ka inFile galvene, un pēc tam atjaunina
outfile galvene.
Un tad tas skan katru pikseli, kas scanline, pixel by pixel, un pēc tam
raksta, ka pikseli uz OUTFILE.
>> Tātad, jūsu pirmais solis varētu palaist šādiem
komandu terminālī -
cp copy.c whodunit.c.
Tas rada kopiju copy.c nosaukts whodunit.c.
Tātad, mūsu pirmais solis, lai atvērtu failu, labi, tur ir precīza
reprodukcija ka copy.c.
Tāpēc es ņemšu atvaļinājumu jums apskatīt to.
>> Kas mums ir darīšana ar šo PSET ir failu I / O, galvenokārt ņemot failus,
lasīšana, rakstīšana, rediģēšanas tiem.
Kā jūs pirmo reizi atverat failu?
Nu, jūs gatavojas atzīt failu rādītājs, un tad jūs saucat
Funkcija fopen.
Iet ceļā, vai nosaukumu, kas failu, un tad veids, ka jūs vēlaties
atvērt šo failu iekšā
Iet kādā r atvērs foo.bmp lasīšanai.
Tā fopen ar iet ar w būs atvērta bar.bmp, rakstot failu un
faktiski rediģēt to.
>> Tāpēc tagad, ka mēs esam atvērti failu, mūsu Nākamais solis ir atjaunināt galvenes info
par OUTFILE.
Kas ir galvenes informācija?
Nu, vispirms mums ir nepieciešams zināt ko bitmap ir.
Bitmap ir tikai vienkārša izkārtojums baitu.
Un viņi deklarē šajā failā šeit, bmp.h, ar ķekars
Informācija par to, bitmap faktiski ir izgatavots no.
Bet tas, ko mēs tiešām rūp, ir bitmap failu header, tieši šeit, un
bitmap info header, nekā šeit.
Header sastāv no pāris mainīgie, kas būs ļoti noderīga.
Ir biSizeImage, kas ir kopējais izmērs attēla baitos.
Un tas ietver pikseļu un polsterējums.
Polsterējums ir ļoti svarīgi, bet mēs nokļūt, ka vēlāk.
>> BiWidth apzīmē platumu attēls pikseļos mīnus polsterējumu.
BiHeight tad arī augstums attēla pikseļos.
Un pēc tam BITMAPFILEHEADER un BITMAPINFOHEADER, kā jau es teicu
agrāk, tie ir pārstāvētas kā structs.
Tātad, jūs nevarat piekļūt failu galvenes pati par sevi, bet jūs vēlaties nokļūt
šie mainīgie iekšpusē.
>> OK.
Tātad, kā mēs atjaunināt galvenes info?
Nu, vispirms mums ir, lai redzētu, vai mēs nepieciešams mainīt jebkādu informāciju no
infile, pavediens, lai outfile, spriedums.
Vai kaut kas mainās šajā gadījumā?
Nu, faktiski nav, jo mēs ejam kas tikai mainot krāsas.
Mēs nebrauksim, mainās failu izmēra, attēla izmērs, platums,
vai augstuma.
Tātad, jūs visi labi tagad ar tikai kopēšanu katru pikseli.
>> OK.
Tāpēc tagad aplūkosim, cik mēs patiesībā var lasīt katru pikseli no lietas materiāliem.
Citu failu I / O funkciju stāsies play -
fread.
Tas aizņem ar rādītāju uz struct kas satur baiti, kas
jūs lasāt.
Tātad jūs lasāt par to.
Un tad jums iet ar izmēru, kas ir lielums katram elementam, kas jums
vēlas lasīt.
Lūk, funkciju sizeof noderēs.
Tad jums iet ar numuru, kurā apzīmē skaitu elementu
izmērs lasīt.
Un tad beidzot, inptr, kas ir failu rādītājs, ka tu esi
nolasīšu no.
Tātad visi šie elementi ir iekšā inptr un viņi gatavojas datiem.
>> Apskatīsim nelielu piemēru.
Ja es gribu lasīt par datu diviem suņiem, labi, es varu darīt to par vienu no diviem veidiem.
Es varu vai nu lasīt diviem objektiem izmēru suns no mana inptr, vai es varu izlasīt
viens objekts izmēru diviem suņiem.
Tātad jūs redzat, ka atkarībā no tā, ka jums organizēt lielumu un skaitu, jums
var izlasīt vienā baitu skaitu.
>> Tāpēc tagad, pieņemsim mainīt pikseļu krāsu, kā mums vajag.
Ja paskatās bmp.h atkal, tad Jūs redzēsiet, ka apakšā
RGBTRIPLEs ir vēl struktūrai, kur tie sastāv no trim bytes.
Viens, rgbtBlue, rgbtGreen un rgbtRed.
Tātad, katrs no tiem ir summa zilā, summa zaļā krāsā, un
daudzums sarkano iekšā šo pikseli, ja katra summa pārstāv
heksadecimālo numuru.
>> Tāpēc ff0000 būs zilā krāsā, jo tā iet no zila,
zaļā, sarkanā krāsā.
Un tad visi f s būs baltā krāsā.
Pieņemsim apskatīt smiley.bmp, kas Jums ir jūsu izplatīšanas kodu.
Ja jūs atvērt to tikai attēlu skatītājs, tad jūs
vienkārši redzēt sarkanu smaidiņu.
Bet ņemot dziļāku nirt, mēs redzam, ka struktūra
un tas ir tikai pikseļi.
Mums ir baltas pikseļi, un tad sarkano pikseļi.
Balts, ffffff, un tad visi sarkans pikseļi Esmu iezīmētu jums
šeit, un jūs redzēsiet, ka viņi 0000FF.
Nulle zils, nulle zaļā un sarkanu.
Un tā kā smaidiņu ir astoņi pikseļus plats, mums nav nekādas polsterējums.
Labi.
>> Tātad, ja es būtu piešķirt dažādas vērtības līdz RGBTRIPLE, un es gribēju
padarītu to zaļo krāsu, tad tas, ko es varētu darīt, ir Es vēlētos deklarēt RGBTRIPLE, nosaukts
triple, un pēc tam, lai piekļūtu katru baitu šajā struct I
varētu izmantot dot operatoram.
Tātad triple.rgbtBlue, es varu piešķirt, ka līdz 0.
Zaļā es varu piešķirt to pilnībā - jebkurš numuru, patiešām, starp 0 un ff.
Un tad sarkana, es esmu arī gatavojas teikt 0.
Tātad, kas man dod zaļo pikseļu.
>> Nākamais, kas notiks, ja es gribu, lai pārbaudītu vērtība kaut ko?
Es varētu būt kaut kas pārbauda vai trīskāršā ir rgbtBlue vērtība ir
ff, un pēc tam izdrukāt, "Es jūtos blue! ", kā rezultātā.
Tagad, tas nebūt nenozīmē, ka pikseļu ir zils, vai ne?
Tāpēc, ka Pixel ir zaļā un sarkanā vērtības varētu būt arī ne-0 vērtības.
Viss, ka tas nozīmē, un visu, kas tas ir pārbaudīt, ir
par pilnu zilā krāsā.
Bet visi pikseļi var būt arī daļēja krāsu vērtības, piemēram, tas,
Nākamais piemērs šeit.
>> Tas ir nedaudz grūtāk redzēt ko šis tēls ir tagad.
Tas izskatās nedaudz vairāk kā clue.bmp, ka jums tiks dota.
Tagad, fiziski, jūs varētu atrisināt šo, jo tur ir daudz sarkanā, ko
turot sarkanu ekrānu attēlu, lai ka citas krāsas var parādīties.
Tātad, kā mēs atdarinātu to ar c?
Nu, mēs varētu noņemt visus sarkans no attēla pilnībā.
Un tā, kā to darīt, mēs gribētu noteikti ik pikseļa sarkano vērtību 0.
Un tā tēls varētu izskatīties mazliet bit, piemēram, tas, kur mums nav sarkans
whatsoever.
>> Mēs varam redzēt slēpto ziņa mazliet skaidrāk tagad.
Tas ir vēl viens smiley sejas.
Vai varbūt mēs varētu izmantot citu metodi.
Varbūt mēs varētu identificēt visas sarkanās pikseļi -
, tas ir, visas pikseļiem ar 0 zils, 0 zaļā un 0 sarkans -
un mainīt tos, balta.
Un mūsu tēls varētu izskatīties kaut kas līdzīgs šim.
Mazliet vieglāk redzēt.
>> Ir daudz citu veidu, kā atklāt noslēpums ziņu, kā arī,
nodarbojas ar krāsu manipulācijas.
Varbūt jūs varētu izmantot vienu no metodēm ka es minēts iepriekš.
Un papildus, jūs varētu vēlēties uzlabot dažas krāsas
un vainīgos saukt out.
>> Tāpēc tagad, ka mēs esam mainījuši pixel krāsu, blakus mums ir nepieciešams, lai rakstīt tos
, lai ar scanline, pixel by pixel.
Un atkal, jūs vēlaties, lai atskatītos līdz copy.c, ja jums nav kopēt
tā jau ir, un apskatīt fwrite funkcija, kas ņem datus rādītājs
līdz struktūrai, kas satur baiti ka jūs lasāt no tās lieluma
preces, preces, un pēc tam outptr -
galamērķi no šiem failiem.
>> Pēc tam, kad rakstīt pikseļiem, jūs arī rakstīt polsterējumu.
Kas ir polsterējums?
Nu, katrs rgbt pikseļu ir trīs baiti.
Bet, scanline par bitmap attēlu ir jābūt vairākus no četriem bytes.
Un, ja pikseļu skaits nav dalās ar četri, tad mums ir nepieciešams, lai pievienotu
tas polsterējums.
Polsterējums ir tikai pārstāv 0s.
Tātad, kā mēs rakstīt, vai lasīt šo?
Nu, izrādās, ka jūs nevarat faktiski fread polsterējums, bet jūs varat
aprēķināt.
>> Šajā gadījumā pavediens un verdikts ir vienāds platums, lai
apdare ir tāda pati.
Un polsterējums, kā jūs redzēsiet in copy.c, aprēķina
ar zem formulas -
bi.biWidth reizes sizeof (RGBTRIPLE) būs dod mums, cik daudz baitu bmp
ir katrā rindā.
No turienes, modulos un atskaitījumus ar 4, var aprēķināt, cik
daudzi baiti ir pievienots tā, ka vairāku baitu par
katrā rindā ir četri.
>> Tagad, kad mums ir formula cik daudz polsterējums mums vajag, tagad
mēs varam rakstīt to.
Tagad, es minēju iepriekš, polsterējums ir tikai 0s.
Tātad šajā gadījumā, mēs esam tikai liekot char, šajā gadījumā 0, mūsu
outptr - mūsu outfile.
Tā, ka var vienkārši fputc 0, komats outptr.
>> Tātad, kamēr mēs esam lasījums mūsu failu, failu I / O, ir tur līdzi mūsu
pozīcija šos failus ar kaut ko sauc failu stāvokļa indikators.
Domājiet par to kā kursors.
Būtībā, tas avansus katru reizi ka mēs fread, bet mums ir
kontroli pār to, too.
>> Lai pārvietotu failu pozīcijas indikatoru, Jūs varat izmantot šo funkciju fseek.
Kur inptr pārstāv failu rādītājs, ka jūs esat meklē, kas,
summa ir baitu skaits, kas jums vēlas, lai pārvietotu kursoru, un pēc tam no
saistīts ar atskaites punktu No kur jūsu kursors.
Ja jūs iet ar SEEK_CUR, ka pārstāv strāvu
pozīciju failā.
Vai arī jūs varat izmantot dažas citus parametrus.
Tātad, mēs varētu vēlēties, lai izmantotu fseek izlaist pār polsterējums in failu.
Un atkal, ja jūs esat iestrēdzis, tur ir piemērs, ka copy.c.
>> Tāpēc tagad mēs esam atvērti failu, pavediens, un spriedums.
Mēs esam atjauninājuši galvenes info par mūsu spriedums, jo katrs
bitmap nepieciešams galveni.
Mēs esam tad nolasīt atrisinājums ir scanline, pixel by pixel, mainot
katru krāsu pēc vajadzības, un rakstot tos uz
spriedums, pixel by pixel.
Kad jūs atveriet spriedumu, jūs varat redzēt, kas vaininieks, vai kāds noslēpums
vēstījums ir.
Mans vārds ir Zamyla, un tas bija detektīvromāns.