[Daqq tal-mużika] ZAMYLA Chan: Kien Miss Scarlett mal-gandlier. Whodunit? Well, aħna qed tmur biex issir taf. Fil-Clue board game, inti tista ' tingħata dehra aħmar fiżika. U li l-immaġni huwa ħafna aħmar u spotty, u xogħol tiegħek huwa li juru l-messaġġ moħbija. U normalment int provduti aħmar lenti, jew skrin aħmar għal jiżvelaw dak il-messaġġ moħbija. Well, aħna qed tmur biex jimitaw dan. Fil whodunit, int tingħata immaġni Bitmap li jistenna ħafna spotty u aħmar, u mbagħad għaddi l-programm whodunit biex jiżvelaw messaġġ moħbija. Mela ejja break dan in passi. L-ewwel, inti tixtieq li tiftaħ il-fajl - l-clue li inti ħadthom ġiet mogħtija. U mbagħad joħloq ukoll fajl Bitmap verdett. Imbagħad inti tixtieq li taġġorna l-Bitmap header info għall-outfile verdett. Aktar dwar dan aktar tard. U allura int ser jinqara fil- clue, scanline, pixel mill pixel, tibdil fil-kuluri pixel bħala meħtieġ, u l-kitba dawk fil-verdett - pixel mill pixel fil- scanline verdett. Kif nistgħu tibda tmur dwar dan? Well, fortunatament, għandna copy.c fil-kodiċi ta 'distribuzzjoni. U dan se jipprova pjuttost utli għalina. Copy.c jiftaħ fajl, jaqra f'dak header infile, u mbagħad taġġorna l- header outfile tal. U mbagħad jgħid kull pixel fil- scanline, pixel mill pixel, u mbagħad jikteb li pixel fil-outfile. Għalhekk, l-ewwel pass tiegħek jista ' jkun jiddekorri ġej kmand fil-terminal - cp copy.c whodunit.c. Dan se joħloq kopja ta ' copy.c jismu whodunit.c. Allura l-ewwel pass tagħna li tiftaħ il- file, ukoll, hemm xi eżatt replika ta 'dak fil copy.c. So I ser tħallik li tħares lejn dan. Dak li aħna qed jittrattaw f'dan PSET huwa file I / O, bażikament tieħu fajls, qari, kitba, editjar minnhom. Kif inti ewwel tiftaħ fajl? Well, int ser tiddikjara fajl pointer, u allura inti sejħa- fopen funzjoni. Għaddi fil-passaġġ, jew l-isem ta 'dik fajl, u mbagħad il-mod li tixtieq li tiftaħ dan il-fajl pulzieri Tgħaddi fi r se tiftaħ foo.bmp għall-qari. Billi fopen ma jgħaddi minn w se bar.bmp miftuħa, għall-kitba l-fajl u attwalment editjar. Allura issa li aħna ħadthom fetħet il-fajl, tagħna pass li jmiss huwa li taġġorna l-info header għall-outfile. X'hemm info header? Ukoll, l-ewwel għandna bżonn inkunu nafu dak Bitmap huwa. A Bitmap hija biss sempliċi arranġament ta 'bytes. U dawn qed dikjarati f'dan il-fajl hawn, bmp.h, bil-mazz ta ' informazzjoni ta 'dak Bitmap huwa attwalment magħmula minn. Imma dak li aħna verament jimpurtak huwa l- fajl Bitmap header, dritt hawn, u l-header info Bitmap, hawn fuq. Il-header hija komposta minn koppja ta ' varjabbli li se jkunu utli ħafna. Hemm biSizeImage, li hija l- daqs totali tas-immaġini fil-bytes. U dan jinkludi pixels u padding. Padding huwa importanti ħafna, iżda aħna ser jiksbu għal dak aktar tard. BiWidth jirrappreżenta l-wisa 'tal- immaġini fil pixels nieqes l-ikkuttunar. BiHeight huwa allura wkoll l-għoli tal-immaġini fil pixels. U allura l-BITMAPFILEHEADER u l- BITMAPINFOHEADER, kif semmejt qabel, dawk huma rappreżentati bħala structs. Allura, inti ma tistax aċċess għall-header tal-fajl innifsu, iżda tixtieq tkun taf biex tikseb dawk il-varjabbli ġewwa. OK. Allura kif nistgħu taġġorna l-info header? Ukoll, l-ewwel irridu naraw jekk aħna bżonn li tbiddel kwalunkwe informazzjoni mill- il infile, il-clue, lill- outfile, l-verdett. Huwa xejn jinbidlu f'dan il-każ? Well, mhux verament, għaliex aħna qed tmur li għandhom jinbidlu biss il-kuluri. Aħna mhux ser jinbidlu l-fajl daqs, id-daqs immaġini, il-wisa, jew l-għoli. Allura int kollha dritt għal issa mill biss ikkupjar kull pixel. OK. Allura issa ejja nħarsu lejn kif għandna attwalment tista 'taqra kull pixel mill-fajl. Fajl ieħor I / funzjoni O se jidħlu fis-seħħ - fread. Huwa jieħu fil-pointer għall-Istituzzjonjijiet li se jkun fiha l-bytes li int qari. Allura inti qed taqra f'dak. U mbagħad inti tgħaddi fil-daqs, li hija id-daqs ta 'kull element li inti trid taqra. Hawnhekk, il-sizeof funzjoni se jidħlu fil handy. Imbagħad inti tgħaddi fin-numru, li jirrappreżenta n-numru ta 'elementi ta' daqs biex jinqara. U mbagħad finalment, inptr, li hija il-pointer fajl li int se tinqara minn. Allura dawn l-elementi huma ġewwa inptr u dawn qed tmur biex data. Ejja nħarsu lejn eżempju ftit. Jekk irrid jaqra fis dejta żewġ klieb, ukoll, I tista 'tagħmel dan f'wieħed minn żewġ modi. I tista 'jew jaqra fil żewġ oġġetti ta' daqs klieb minn inptr tiegħi, jew I tista 'taqra f'wieħed joġġezzjonaw daqs żewġ klieb. Allura inti tara li jiddependi fuq il-mod li inti tirranġa daqs u numru, inti jista 'jaqra fl-istess numru ta' bytes. Allura issa, ejja jibdlu l- kulur pixel kif għandna bżonn. Jekk inti tħares lejn bmp.h darb'oħra, allura tkun taf tara li fil-qiegħ RGBTRIPLEs huma Struct ieħor, fejn dawn huma magħmula minn tliet bytes. Waħda, rgbtBlue, rgbtGreen, u rgbtRed. Allura kull wieħed minn dawn tirrappreżenta l-ammont tal blu, l-ammont ta 'aħdar, u l- ammont ta 'aħmar ġewwa dan pixel, fejn kull ammont huwa rappreżentat minn numru hexadeċimali. Allura FF0000 ser ikunu ta 'kulur blu, għaliex tmur minn blu, għal aħdar, aħmar. U mbagħad kollha f se jkun abjad. Ejja tagħti ħarsa lejn smiley.bmp, li għandek fil-kodiċi ta 'distribuzzjoni tiegħek. Jekk inti tiftaħ lilha biss ta 'immaġni telespettatur, allura inti ser biss tara smiley aħmar. Iżda li tieħu adsa aktar profonda fis, aħna ser tara li l-istruttura ta 'dan huwa biss pixels. Għandna pixels abjad, u mbagħad aħmar pixels. L-abjad, FFFFFF, u mbagħad kollha tal- pixels ħomor Stajt kkulurita għalik hawn, u tara li dawn qed 0000ff. Zero blu, aħdar żero, u aħmar sħiħa. U peress smiley huwa tmien pixels wiesgħa, aħna ma jkollhom ebda padding. Kull dritt. Mela jekk jien kienu li tassenja valuri differenti għal RGBTRIPLE u xtaqt li jagħmilha ħodor, allura dak li nixtieq nagħmel hija Nixtieq jiddikjara RGBTRIPLE, jismu tripla, u mbagħad għall-aċċess kull byte f'dak Istituzzjonjijiet I tuża l-operatur dot. So triple.rgbtBlue, nista ' tassenja li għal 0. Green I tista 'tassenja lill full - kull numru, verament, bejn 0 u ff. U mbagħad aħmar, jien ukoll se ngħid 0. Mela allura li tagħti me a pixel aħdar. Sussegwentement, jekk dak I jridu jiċċekkjaw il-valur ta 'xi ħaġa? I jista 'jkollhom xi ħaġa li l-kontrolli jekk il-valur rgbtBlue l-triple huwa ff u mbagħad print, "jien tħossok blue! ", bħala riżultat. Issa, dan ma jfissirx neċessarjament li l-pixel huwa blu, id-dritt? Minħabba li l-valuri tal-pixel aħdar u aħmar jista 'jkollhom ukoll non-0-valuri. Dak kollu li dan ifisser, u dak kollu li dan qed jiċċekkja għal huwa għal kulur blu sħiħa. Iżda pixels kollha jistgħu wkoll ikollhom parzjali Valuri kulur, bħal dan eżempju li jmiss hawn. Huwa ftit diffiċli biex tara liema din id-dehra issa huwa. Dan jistenna ftit aktar bħall- clue.bmp li inti ser tingħata. Issa, fiżikament, inti tista issolvi dan, għaliex hemm ħafna ta 'aħmar, billi azjenda up skrin aħmar għall-immaġini hekk li l-kuluri l-oħra jista 'jidher. Allura kif nistgħu jimitaw dan bi c? Well, nistgħu tneħħi l-aħmar mill-immaġini kompletament. U hekk jagħmlu dan aħna'd stabbiliti kull valur aħmar pixel għal 0. U għalhekk l-immaġini se tfittex ftit qisu dan, fejn għandna l-ebda aħmar tkun xi tkun. Nistgħu naraw l-messaġġ moħbija a ftit aktar ċar issa. Huwa wiċċ smiley ieħor. Jew forsi nistgħu jużaw metodu ieħor. Forsi, nistgħu jidentifikaw kollha tal-pixels ħomor - jiġifieri, kollha tal-pixels 0 blu, 0 aħdar, u 0 aħmar - u jibdlu dawk għall-abjad. U l-immaġni tagħna tista 'tidher xi ħaġa bħal din. A ftit aktar faċli biex tara. Hemm ħafna modi oħra biex tikxef l-messaġġ sigriet kif ukoll, jittrattaw il-manipulazzjoni kulur. Forsi inti tista 'tuża wieħed mill-metodi li semmejt hawn fuq. U addizzjonalment, inti tista 'tixtieq biex itejbu xi kuluri u jġibu dawk barra. Allura issa li aħna ħadthom biddel il-pixel kulur, li jmiss aħna biss jeħtieġ li jiktbu għalihom fil lill-scanline, pixel mill pixel. U għal darb'oħra, tixtieq tkun taf biex inħarsu lura li copy.c, jekk int ma kkupjati diġà, u ħarsa lejn il fwrite funzjoni, li tieħu data, a pointer għall-Struct li fiha l-bytes li inti qed taqra minn, id-daqs tal- l-oġġetti, in-numru ta 'oġġetti, u allura l-outptr - id-destinazzjoni ta 'dawn il-fajls. Wara li tikteb fil-pixels, inti ser ukoll għandek tikteb fil-padding. X'inhu ikkuttunar? Ukoll, kull pixel rgbt huwa ta 'tliet bytes twil. Iżda, il-scanline għal immaġini Bitmap irid ikun multiplu ta 'erba' bytes. U jekk in-numru ta 'pixels mhuwiex multiplu ta 'erba, allura għandna bżonn li jiżdiedu dan padding. Padding huwa biss rappreżentat minn 0s. Allura, kif nistgħu jiktbu, jew taqra dan? Ukoll, jirriżulta li inti ma tistax ikkuttunar attwalment fread, imma int tista ' kkalkulata. F'dan il-każ, l-clue u l-verdett jkollhom l-istess wisa ', sabiex il- ikkuttunar huwa l-istess. U l-ikkuttunar, kif tkun taf tara fil copy.c, huwa kkalkulat bil-formula hawn taħt - sizeof darbiet bi.biWidth (RGBTRIPLE) se agħtina kemm bytes l-BMP għandha f'kull filliera. Minn hemm, il-modulos u subtractions ma 4 jista 'jikkalkula kemm ħafna bytes għandhom jiżdiedu sabiex l-multiplu ta 'bytes fuq kull ringiela huwa erbgħa. Issa li aħna għandna l-formula għall- kemm ikkuttunar għandna bżonn, issa nistgħu tiktibha. Issa, semmejt qabel, ikkuttunar huwa biss 0s. Allura f'dak il-każ, aħna qed biss it-tqegħid char, f'dan il-każ ta '0, fis tagħna outptr - outfile tagħna. Allura li jista 'jkun biss fputc 0, comma outptr. Għalhekk, filwaqt li aħna ħadthom ġiet qari fis tagħna fajl, fajl I / O żamm kont ta 'tagħna pożizzjoni f'dawk il-fajls ma 'xi ħaġa imsejħa l-indikatur tal-pożizzjoni fajl. Think tiegħu bħala cursor. Bażikament, hija tressaq kull darba li aħna fread, iżda aħna għandna kontroll fuq dan, wisq. Biex tmexxi l-indikatur tal-pożizzjoni fajl, inti tista 'tuża l-fseek funzjoni. Meta l-inptr tirrappreżenta l-fajl pointer li qed tfittex fi, l- ammont huwa n-numru ta 'bytes li inti jridux jimxu il-cursor, u mbagħad minn tirrigwarda l-punt ta 'referenza minn fejn cursor tiegħek. Jekk inti tgħaddi fil SEEK_CUR, li jirrappreżenta l-preżenti pożizzjoni fil-fajl. Jew tista 'tuża xi parametri oħra. Għalhekk, aħna tista 'tixtieq tuża fseek skip fuq l-ikkuttunar tal-fajl. U għal darb'oħra, jekk int staġnati, hemm eżempju ta 'dik fil copy.c. Allura issa konna fetaħ il-fajl, l-clue, u l-verdett. Imxejna aġġornata l-info header għal verdett tagħna, għaliex kull Bitmap teħtieġ header. Imxejna mbagħad jaqra fil-l-clue scanline, pixel mill pixel, jinbidlu kull kulur kif meħtieġ, u miktub dawk fil- verdett, pixel mill pixel. Ladarba inti tiftaħ verdett, tista 'tara li l-ħati, jew dak l-sigrieti messaġġ huwa. Jisimni Zamyla, u dan kien whodunit.