[Музика свира] ЗАМИЛА цхан: Било је Мис Скарлет са свећњак. Детективски роман? Па, ми идемо да сазнамо. У одбор игре Цлуе, ви можда имати физичку црвену слику. И то је слика веома црвене и неорганизован, а ваш посао је да откривају скривену поруку. И обично ти обезбедити црвена увеличавајуће стакло, или црвени екран за открије ту скривену поруку. Па, идемо да имитирају то. У детективски роман, ви дали битмап слику да изгледа веома неорганизован и црвена, а затим покрените програм детективски роман да открије скривену поруку. Па хајде да се пробије ово у корацима. Прво, ви желите да отворите датотеку - траг који сте добили. А онда такође створити Пресуда битмап фајл. Онда желите да ажурирате битмапу хеадер информације за пресуде оутфиле. Више о томе касније. А онда ћеш прочитати у траг, Сцанлине, пиксел по пиксел, променом боје пиксела као потребно, и писање оне у пресуди - пиксел по пиксел у Пресуда Сцанлине. Како кренути у вези овога? Па, срећом, имамо цопи.ц у коду за дистрибуцију. И то ће се доказати веома корисно за нас. Цопи.ц отвара фајл, наводи се да инфиле је заглавље, а затим ажурира оутфиле је заглавље. И онда пише сваки пиксел у Сцанлине, пиксел по пиксел, а затим пише да је пиксел у оутфиле. Дакле, ваш први корак би могао бити да покренете следећи команда у терминалу - ЦП цопи.ц входунит.ц. Ово ће створити копију цопи.ц имену входунит.ц. Дакле, наш први корак да отворите фајл, па, ту је тачан реплика које у цопи.ц. Зато ћу те оставити да погледате то. Оно што имамо посла са овим псет се фајл И / О, у основи узимајући фајлове, читање, писање, уређивање их. Како прво отворите датотеку? Па, ви идете да прогласи датотеку показивач, а онда позвати Функција фопен. Пасс на путу, или име које филе, а затим режим који желите на унутра отвори тај фајл Доношење у р ће отворити фоо.бмп за читање. Док фопен са пролази у В ће отворен бар.бмп, за писање датотеке и заправо уређивање. Дакле, сада када смо отворили датотеку, наш Следећи корак је да ажурирате информације из заглавља за оутфиле. Шта је главом Информације? Па, прво морамо да знамо шта је растерска. Битмапа је само једноставна распоред бајтова. И они прогласили у овом фајлу овде, бмп.х, са гомилом информације о томе шта растерска је заправо направљен од. Али оно што ми заиста стало је битмап фајл заглавље, овде, и Информације битмапа заглавље, овамо. Заглавље се састоји од неколико варијабле које ће бити веома корисно. Постоји биСизеИмаге, који је Укупна величина слике у бајтовима. А то укључује пиксела и паддинг. Постава је веома важно, али ћемо се на то касније. БиВидтх представља ширину слика у пикселима минус паддинг. БиХеигхт је тада такође висина слике у пикселима. А онда БИТМАПФИЛЕХЕАДЕР и БИТМАПИНФОХЕАДЕР, као што сам поменуо раније, они су представљени као Структуре. Дакле, не можете да приступите заглавље датотеке сама, али ћете желети да дођете до те варијабле унутра. У реду. Па како да ажурирате заглавља информација? Па, прво морамо да видимо да ли смо Потребно је да промените било коју информацију из инфиле, траг, да оутфиле, пресуда. Да ли је било шта мења у овом случају? Па, не, заправо, јер ћемо да се само мења боје. Нећемо да се мења фајл величина, величина слике, ширина, или висина. Дакле, ви сте сви у праву за сада по само копирање сваки пиксел. У реду. Зато сада хајде да погледамо како ми заправо може да чита сваки пиксел из датотеке. Још један фајл И / О функција ће доћи у игру - фреад. Потребно је у показивачем за струцт који ће садржати бајтова који читаш. Дакле, ви читате у то. А онда прође у величини, која је величина сваког елемента који сте желите да прочитате. Ево, функција сизеоф ће добро доћи. Онда прође у броју, које представља број елемената величина за читање. И коначно, инптр, који је датотека показивач да си ће читати из. Дакле, све те елементе су унутра инптр и они ће податке. Погледајмо мало примера. Ако желим да прочитам у подацима два пса, добро, ја могу да урадим један од два начина. Ја могу ни читати у два објекта величине пас из мог инптр, или ја могу да прочитам у једном објекат величине два пса. Па видиш да је у зависности од начина да ли организовати величину и број, те можете прочитати у истом броју бајтова. Па сад, хајде да промените пиксел боје као што треба. Ако погледате бмп.х поново, затим видећете да је на дну РГБТРИПЛЕс су још строги, где они се састоје од три бајта. Један, ргбтБлуе, ргбтГреен, и ргбтРед. Тако да сваки од ових представља износ од плаве, зелене износ, и Износ црвено унутар овог пикселу, где сваки износ представља хексадецимални број. Дакле ФФ0000 ће бити плаве боје, јер иде од плаве, на зелено, на црвено. И онда све м ће бити бела. Хајде да погледамо смилеи.бмп, који имате у вашем коду за дистрибуцију. Ако га отворите у само слике гледалац, онда ћете само видим црвену смешак. Али узимајући дубље зароните у, ми ћемо види да је структура то је само од пиксела. Имамо беле пиксела, а затим црвене пиксела. Бела, фффффф, а онда све ред пиксела сам обојена у за вас овде, а ви видите да су 0000ФФ. Нула плава, зелена нула, и пуна црвена. А пошто смешак је осам пиксела ширине, немамо никакав паддинг. У реду. Дакле, ако сам био на додели различите вредности до РГБТРИПЛЕ и желео сам да направи зелено, онда шта ћу урадити јесте Ја бих прогласити РГБТРИПЛЕ, по имену троструко, а затим да приступе сваком бајт у оквиру те струцт И би употребили оператор дот. Тако трипле.ргбтБлуе, могу доделити то 0. Зелена ја да га доделите пун - било број, стварно, између 0 и фф. И онда црвени, ја такође да кажем 0. Тако онда да ми даје зелено пиксел. Даље, шта ако ја желим да проверим вредност нечега? Могао сам нешто да проверава да ли ргбтБлуе вредност троструког је ФФ и онда штампа, "осећам плаво! ", као резултат. Сада, то не мора да значи да пиксел је плаво, зар не? Због зелене и црвене вредности пиксел је такође може да имају не-0 вредности. Све ово значи да је, и све то ово је за проверу је за пуну плаву боју. Али све пиксела такође може имати парцијални вредности боја, као што је овај Следећи пример овде. То је мало теже да се види шта ова слика је сада. Ово изгледа мало висе као цлуе.бмп да ћете добити. Сада, физички, можда решити ово, јер има доста црвене, од држи црвену екран на слици тако да су остале боје могу се појавити. Па како да имитирају ово са ц? Па, можемо уклонити све црвене од слике у потпуности. И тако да се то уради да смо кренули свако Пикел црвени вредност на 0. И тако слика би изгледала мало Мало овако, где немамо црвена ма. Можемо видети скривену поруку за мало јасније сада. То је још један насмејано лице. Или можда бисмо могли да користите неку другу методу. Можда смо могли идентификовати све црвених пиксела - то јест, све пиксела са 0 плаво, зелено 0, и 0 црвена - и промените оне беле. И наша слика може изгледати нешто овако. Мало лакше видети. Постоји много других начина да се открију тајна порука, као и, се баве манипулацијом боја. Можда можете да користите неки од метода да сам горе поменуо. И додатно, можда ћете желети да побољша неке боје и донети оне напоље. Дакле, сада када смо променили пиксела боја, поред ми само треба да их пишу у на Сцанлине, пиксел по пиксел. А опет, ви ћете желети да погледате уназад да цопи.ц, ако нисте копирали већ, и погледајте фврите функција, која узима податке, показивач на струцт која садржи бајтова да читате из, величине ставке, број ставки, и онда оутптр - дестинација тих фајлова. Након што напишете у пикселима, ви ћете такође морају да пишу у пуњење. Шта је паддинг? Па, сваки пиксел ргбт је дугачак три бајта. Али, Сцанлине за битмапиране слике мора да буде више од четири бајта. И ако је број пиксела није више од четири, онда морамо да додате паддинг ово. Постава је само представљен 0с. Дакле, како да пишу, или прочитао ово? Па, испоставило се да не можете заправо фреад паддинг, али можете израчунати га. У овом случају, траг и пресуда имају исту ширину, тако паддинг је исти. И паддинг, као што ћете видети у цопи.ц, обрачунава са доњом формулом - би.биВидтх пута сизеоф (РГБТРИПЛЕ) ће дајте нам колико бајтова БМП има у сваком реду. Одатле, модулос и одузимања са 4 може израчунати колико многи бајтова мора бити додата тако да се више бајтова о сваки ред је четири. Сада када имамо формулу за колико паддинг нам треба, сада можемо га написати. Сада, сам раније поменуо, паддинг је само 0с. Дакле, у том случају, ми само стављање цхар, у овом случају 0, у наше оутптр - наш оутфиле. Тако да само могу бити фпутц 0, зарез оутптр. Дакле, док смо читали у наш фајл, фајл И / О је пратила наше позиција у тим датотекама са нечим зове индикатор фајл положај. Мислите о томе као курсора. У суштини, она напредује сваки пут да ми фреад, али имамо контролу над њим, такође. Да бисте померили индикатор фајл позицију, можете да користите функцију фсеек. Где инптр представља датотеку Показивач да сте у потрази за, износ је број бајтова који сте Желим да померите курсор, а затим из се односи на референтну тачку одакле се курсор налази. Ако прође у СЕЕК_ЦУР, да представља струју позиција у датотеци. Или можете да користите неке друге параметре. Дакле, ми смо можда желети да користите фсеек да прескочите над пуњење у у датотеци. А опет, ако сте заглављени, ту је пример да се у цопи.ц. Дакле, сада смо отворили датотеку, траг, и пресуда. Ми смо ажурирали информације за заглавље наша пресуда, јер свака битмапа треба заглавље. Онда смо прочитали у траг је Сцанлине, пиксел по пиксел, променом свака боја по потреби, и писања оних у пресуда, пиксел по пиксел. Када отворите пресуду, можете видети ко кривац, или шта тајна порука. Моје име је Замила, и ово је детективски роман.