[Powered by Google Translate] [Валктхроугх - Проблем Сет 4]
[Замила Цхан - Универзитет Харвард]
[Ово је ЦС50. - ЦС50.ТВ]
У реду. Поздрав свима, и добродошли у Валктхроугх 4.
>> Данас наша псет је форензика.
Форензика је заиста забавно псет који подразумева бављење битмап фајловима
да открије ко је починио злочин.
Онда ћемо да промените величину неке растерске датотеке,
онда смо и идемо да се бави заиста забавно делу званом Рецовер,
у којима смо у суштини предали меморијску картицу
у којој је неко случајно избрисан све своје фајлове,
и ми смо се питали да поврати те фајлове.
>> Али, пре него што уђемо у псет, само заиста желим да честитам свима.
Ми смо о томе на средини овог курса.
Квиз 0 је иза нас, а ми смо на псет4, па у суштини, ми смо на пола пута.
Прешли смо дуг пут, ако се осврнемо уназад својим псетс, псет0 и псет1,
па честитам се о томе,
и ми ћемо да уђемо у неке заиста забавна ствари.
>> Дакле, наша тоолбок за ову псет, опет, уместо трчања судо иум-и упдате,
смо у стању да покрећу само упдате50 ако си у верзији 17,3 и изнад апарата.
Зато будите сигурни да покренете упдате50 - то је много лакше, а неколико мање карактера -
да се уверите да сте на најновијој верзији апарата.
Посебно је важно да упдате50 када почнете да користите ЦС50 Провера.
Дакле, проверите да ли сте то урадили.
>> За све деонице за ову псет,
ћемо се бавити датотека улаза и излаза, да поднесе И / О.
Ми ћемо ићи преко доста програма који се баве са низовима
указујући на фајловима и слично,
па смо желели да се уверите да смо стварно упознати и опуштени
бави како улазе и излазе у фајловима.
>> У дистрибутивном кода за ову псет је фајл под цопи.ц,
и то је оно што ћемо наћи ће бити заиста корисно за нас
јер ћемо завршити ствари копирање цопи.ц фајл
и само га мењају мало да би могли да постигну прва 2 дела проблема сету.
>> И тако, онда као што сам раније поменуо, ми се суочавамо са битмапе као и ЈПЕГ.
Дакле стварно разумевање структуре како ти фајлови су организовани,
како стварно можемо превести 0с и 1с у Структуре
и ствари које заиста могу да разумеју и тумаче и уређивање,
да ће то бити веома важно,
па иде у ЈПЕГ и битмап фајлова и разумевање структуре од оних.
>> Псет4, као и обично, започиње одељак питања.
Они ће се бавити фајл И / О и добили сте навикли на то.
Тада део 1 је детективски роман, у коме сте дали битмап фајл
који изгледа нешто као црвене тачкице свуда.
А онда у суштини шта ћемо да урадимо јесте да овај фајл и само га изменили мало
у верзији која може да читамо.
У суштини, када завршимо, ми ћемо имати исти фајл,
осим да ћемо бити у могућности да видите скривену поруку сакривену од свих тих црвеним тачкицама.
Онда Ресизе је програм који, с обзиром на фајл
а онда су му дали име фајла да даје и онда дати број као добро,
ће заправо величину ту битмапу тим целобројну вредност.
Онда на крају, имамо опорави псет.
Добијају смо меморијску картицу, а затим да се опорави све фотографије
које су случајно избрисане,
Али, као што ћемо научити, не заправо избрисан и уклоњен из датотеке;
ми смо некако изгубили где су били у фајлу, али ми ћемо да се опорави то.
>> Сјајно. Зато је одлазак у фајлу И / О конкретно, то су читав списак функција које ћете користити.
Већ сте видели мало основе фопен, фреад и фврите,
али ми ћемо да погледамо даље у неки фајл И / О функције, као што су фпутц,
у којој се само исписати један карактер на време,
да фсеек, где некако преместите индикатор датотеке позицију напред и назад,
и онда неки други. Али ми ћемо ићи у то касније мало током псет.
>> Дакле, прво, само да се у фајлу / И пре него што уђемо у псет,
да отвори датотеку, на пример, оно што треба да урадите је заправо поставили показивач на тај фајл.
Дакле, имамо ФИЛЕ * показивач.
У том случају, зовем га у показивача, јер то ће бити мој инфиле.
И тако ја идем да користе фопен функцију и онда име фајла
а онда је режим у коме ћу се бавити са датотеком.
Тако да је "р" у овом случају за читање, "в" за писање, а затим "" за додавање.
На пример, када имате посла са инфиле
и све што желите да урадите је да прочитате битова и бајтова налазе тамо,
онда вероватно ћеш желети да користите "р" као свој режим.
Када желите да заиста писати, некако направити нову датотеку,
онда шта ћемо да урадимо је да ћемо отворити нову датотеку
и употребите "В" мод за писање.
>> Дакле, када сте заправо читате у списима, структура је следећа.
Прво се укључи показивач на струцт који ће садржати бајтове које читаш.
Тако да ће то бити крај локација бајтова које читаш.
Онда ћеш да укаже на величину, као основи колико бајтова
Ваш програм треба да чита датотеке, величина основи један елемент,
и онда ћеш да прецизира колико елемената желите да прочитате.
И на крају, морате да знате где читате,
тако да ће бити ваш за показивач.
Ја бојама њих јер фреад је такође веома сличан фврите,
осим желите да се уверите да користите исправну наредбу,
уверите се да сте заправо писања или читања из десне фајла.
>> Дакле, као и раније, ако имамо у виду величину елемента, као и број елемената,
онда можемо да играмо овде мало.
Рецимо ја имам пса струцт па онда желим да прочитам два пса истовремено.
Шта сам могао да урадим је да каже величине једног елемента ће бити величине једног пса
и ја ћу да прочитате двојицу.
Алтернативно, шта сам могао да урадим је да каже само ћу да прочитам један елеменат
и да је један елемент ће бити величине од два паса.
Дакле, то је аналогно томе како можете некако играти са величином и бројем
у зависности од тога шта је више интуитиван за вас.
>> У реду. Дакле, сада долазимо до писања фајлова.
Када желите да пишете фајл, први аргумент је заправо где читате.
Дакле, то је у суштини подаци које ћете написати у фајлу,
што је ван показивач на крају.
Дакле, када имате посла са псет, уверите се да не збуне.
Можда имају дефиниција раме уз раме.
Можете повући дефиниције у приручнику куцајући човека и онда фврите, на пример,
у терминалу, или можете упутити назад на овај слајд
и проверите да ли користите прави.
Дакле, опет, за фврите, када имате фајл који желите да запишете,
то ће бити последњи аргумент и то ће бити показивач на тај фајл.
Па онда је то како ћемо се бавити писањем, можда неколико бајтова у једном тренутку,
али да желите да само пишем у само једном карактеру.
Као што ћемо видети касније у овом примеру, у битмапе ћемо морати да користимо то.
Тада можемо да користимо фпутц, у суштини само стављањем једне карактер на време, цхр,
у фајл показивача, и то је наша напоље показивач тамо.
Онда кад ми тражимо или напиши у датотеци,
фајл праћење где смо.
Дакле, то је врста курсора, датотека положај индикатора.
И тако сваки пут када пишете или прочитате у датотеку,
датотека заправо сећа где је,
и тако се наставља одакле курсор.
Ово може бити корисно када желите да, рецимо, читате у одређеном износу да уради нешто
а затим прочитајте у следећем износу,
али понекад можемо да се вратимо или заправо почињу од одређене референтне вредности.
Дакле, онда фсеек функција, оно што ради је нам омогућава да померате курсор у одређеном фајлу
одређени број бајтова.
И шта онда морамо да урадимо је да одредите где је референтна вредност.
Дакле, било да се креће напред или назад одакле се курсор тренутно је,
или можемо навести да је то само треба да се креће у од почетка фајла
или од краја датотеке.
И тако да можете проћи у негативним или позитивним вредностима на износ,
и да ће врста курсор било напред или назад.
>> Пре него што уђемо у другим псетс, било каква питања у фајлу И / О?
Ок. Као што смо добили у више примера, слободно ме заустави за питања.
>> Дакле, у детективски роман, ви уручио битмап фајл сличан овом црвеном један на слајду,
и изгледа овако - гомила црвених тачкица - и стварно не знам шта је написано.
Ако разрокост, можда ћете моћи да видите мало плавкасто боју унутар средини.
У суштини, то је место где се чува текст.
Било је убиство које се догодило и морамо да сазнамо ко је то урадио.
Да бисмо то урадили, морамо да некако претворили ову слику у читљивом формату.
Ако ви икада наишао овај, понекад не би било мало комплети
где би сте лупу са црвеним филма. Зна ли ко? Да.
Тако да ће бити руку нешто овако, имати лупу
са црвеном филм преко њега, ти би га ставио преко слике,
а ти би могао да види поруку скривена у њему.
Ми немамо лупу са црвеним филму, тако да уместо да идемо да некако створи сопствени
У овом псет.
И тако је корисник ће улаз детективски роман, онда појма, бмп.,
тако да је инфиле, то је црвена тачка порука
и онда они кажу вердицт.бмп ће бити наш оутфиле.
Дакле, то ће створити нову слику битмап сличан траг једног
осим у читљивом формату где можемо видети скривену поруку.
>> Пошто ћемо се бавити уређивање и манипулацију битмапе од неке врсте,
ћемо врсте ронити у у структури ових битмап фајлова.
Ми смо ишли преко ових мало у предавању, али хајде да погледамо у њих мало више.
Сличице су у суштини само распоред бајтова
где смо навели која бајтова значи шта.
Дакле, овде је нешто као мапе битмап слике
рекавши да почне са неким хеадер фајлова, почиње са неким информацијама у тамо.
Видиш да је на око бајтова броју 14 величина је означена од битмап слике,
и наставља се даље.
Али шта онда смо стварно заинтересовани за ту почиње око броја 54 бајта.
Имамо ове РГБ тројке.
Шта то ће урадити јесте садрже стварне пиксела, боја вредности.
Све изнад тога у заглављу је неке информације
одговара величини слике, ширину слике, и висине.
Кад идемо у постава касније ћемо видети зашто је величина слике
може бити другачији од ширине или висине.
Па онда да заступа ово - ови битмап слике су низови бајтова -
шта можемо да урадимо је да кажем у реду, ја ћу да се сетим да је индекс 14,
то је место где је величина, на пример, већ шта ћемо да урадимо да се то лакше
се ухвати га у струцт.
И тако имамо два Структуре направили за нас, БИТМАПФИЛЕХЕАДЕР
и БИТМАПИНФОХЕАДЕР,
па кад год смо прочитали у том фајлу, по подразумеваном подешавању то ће да иде у реду,
па како то такође ће попунити у варијабли као што су биВидтх и биСизе.
И на крају, сваки пиксел је представљен са три бајта.
Први је износ плаво у пиксел, други је количина зелене,
и коначно, износ од црвених, где је 0 суштини нема плаве или зелене ни црвене или не
па ФФ је максимална вредност.
То су хексадецималне вредности.
Дакле, ако имамо фф0000, онда то одговара максималном износу од плаве
и онда не зелена и црвена не, па онда би нам дати плаву пиксел.
Онда, ако имамо ФФ-а широм одбора, онда то значи да имамо бели пиксел.
То је врста насупрот обично када кажемо РГБ. То заправо иде БГР.
>> Дакле, ако смо заиста погледамо у примеру битмап слике - дозволите ми да један подигне овде.
То је мало мали.
Ја зумирање у, и видимо да је пикселизован. Изгледа блокова боје.
Имате беле блокове и онда црвено блокова.
Ако играте у Мицрософт Паинт, на пример, можете да направите тако нешто
по основи само сликајући одређене квадрата у одређеном редоследу.
Па шта је онда ово преведе у битмапу је следећи.
Овде имамо прве беле пикселе, да су сви 6 су ф-их, а онда имамо црвене пиксела,
показује 0000ФФ.
И тако низ бајтова који имамо показује како је растерска слика ће изгледати.
Дакле, оно што сам овде урадио је само написано све оне бајтове, а затим обојена у црвено
тако да можете видети врста, ако разрокост мало, како је то врста указује насмејано лице.
>> Начин на који растерске слике сам рад је то замислили основи као мрежу.
И тако по дефаулту, сваки ред мреже мора да буде више од 4 бајта.
Ако гледамо битмап слику, ви попуњавањем сваку вредност.
На пример, можда имате овде црвени, зелени, овде је плаво,
али морате да проверите да ли је слика попуњен са умножак од четири бајта.
Дакле, ако желим своју слику да буде широк три блока, онда бих морао да ставим празну вредност
У последњој да буде више од четири.
Па онда бих додати у нечему што зовемо пуњење.
Ја ћу само да означи да постоји са к.
Сада кажу да желимо слику која је 7 пиксела дуго, на пример.
Имамо 1, 2, 3, 4, 5, 6, 7,
и све који се попуњава у бојом.
Начин на који битмап слике раде јесте да морамо 8тх.
Сада имамо 1, 2, 3, 4, 5, 6, 7.
Морамо 8 простора за битмап слике да правилно чита.
Па онда оно што треба да урадимо је да додамо само мало пуњење
да бисте се уверили да су сви ширинама су јединствени
и да су сви ширинама су вишеструки од 4.
И тако сам претходно рекао, као материјали за Кс или изобличену линије,
али у стварним битмап слика преграде је означен хексадецималном 0.
Дакле, то би био један лик, 0.
Шта може доћи јесте ккд команда.
Шта ради је заправо показује вас, као слично ономе што сам раније урадио са ведра
када сам заправо штампана шта свака боја ће бити за пиксел
и онда га бојама, када покренете ккд са следећим командама,
онда заиста ће штампати шта су боје за те пиксела.
Оно што треба да урадите је да овде сам указују, као-С 54
каже да ћу почети на 54. бајта
јер пре тога, сећам се да ли ми гледамо на карту на растерске,
то је све информације у заглављу и такве ствари.
Али оно што ми заиста стало је стварна пиксела који указују на боју.
Дакле, додавањем у тој застави,-а 54, онда смо могли да видимо вредности боја.
И не брините о компликованим заставама и такве ствари.
У спец проблема сет, имаћете упутства о томе како да користите ккд за приказивање пиксела.
Дакле, ако сте овде, некако изгледа као зеленом пољу, ова мала ствар.
Сам бојама на 00фф00 као у основи рекавши ни плава, пуно зеленила, и не црвени.
Тако да одговара на зелено.
Као што видите овде, видимо зелени правоугаоник.
Овај зелени правоугаоник је само 3 пиксела ширине, па онда шта морамо да урадимо
да бисте се уверили да је слика више од 4 виде је додати у екстра пуњење.
И тако онда је то како ви видите овде ове 0с.
То ће заправо бити резултат вашег Промена величине псет,
суштини узимајући мали битмапу, а затим га прошири 4.
И шта видимо јесте да заправо ова слика је 12 пиксела ширине, али 12 је више од 4,
па ми заправо не виде никакву 0с на крају, јер ми не треба да додате
зато што је потпуно обложе. То нема било више простора.
>> Ок. Сва питања у вези пуњење?
Ок. Кул.
>> Као што сам раније поменуо, битмапа су само низ бајтова.
И шта ми имамо је, уместо потребе да пратите тачно који број бајта
одговара на одређени елемент, ми заправо направили струцт да представља то.
Дакле, оно што ми имамо је РГБТРИПЛЕ струцт.
Кад год имате инстанцу РГБ трипле,
јер је ово врста дефинисати струцт, онда можете да приступите ргбтБлуе променљиву,
Слично томе, зелена и црвена променљиве, које ће указивати колико плава, зелена и црвена,
респективно, ви имате.
>> Дакле, ако имамо плаву променљиву скуп на 0, зелена скуп на ФФ,
што је максимална вредност коју може имати, а онда црвено променљива постављена на 0,
шта онда боје би овај троструки РГБ представљају? >> [Ученик] Греен.
Зелена. Управо тако.
То ће бити корисно да знате да кад год имате инстанцу РГБ трипле,
ви у ствари можете да приступите количину боје - плава, зелена и црвена - одвојено.
>> Сада када смо говорили о структури тога, хајде да погледамо на БМП датотеку.
То су направљени Структуре за вас.
Овде имамо БИТМАПФИЛЕХЕАДЕР струцт.
Од интереса је величина.
Касније, имамо инфо заглавље, која има још неколико ствари које су интересантне за нас,
наиме величина, ширина и висина.
Како ћемо ићи у касније, када сте прочитали у датотеци,
аутоматски чита, јер смо поставили налог да буду исти.
Дакле биСизе ће садржати праве бајтове који одговарају стварној величини слике.
А онда овде, на крају, као што смо говорили, имамо РГБТРИПЛЕ типедеф струцт.
Имамо ргбтБлуе, зелених и црвених вези са њом.
>> Сјајно. Ок.
Сада када смо разумели битмапа мало, схватите да имамо фајл заглавље
и информације заглавља повезан са њом и после тога, имамо интересантну ствар
од боја и те боје су представљени РГБТРИПЛЕ Структуре,
и они, заузврат, имати три вредности придружених на плаво, зелено и црвено.
>> Дакле, сада можемо мало размишљају о Рецовер мало.
Извините. Размислите о детективски роман.
Када имамо појма фајл, онда оно што желимо да урадимо је да чита у томе пиксел по пиксел
и онда некако променити те пикселе, тако да можемо да га избацити у читљивом формату.
И тако да је излаз, ми ћемо писати пиксел по пиксел у вердицт.бмп датотеке.
То је врста много тога да уради. Свесни смо тога.
Дакле, шта смо урадили је да смо заправо сам вам обезбедити цопи.ц.
Шта цопи.ц ради је само чини тачну копију датог битмап фајл а затим исписује га.
Дакле, ово је већ отвара датотеку за вас, пише у пикселима по пикселу,
и онда пише у излазном фајлу.
>> Хајде да погледамо то.
Ово је обезбеђивање одговарајуће коришћење,
добијање овде фајлова.
Шта ово ради је она поставља улазни фајл да будемо оно што смо прошли у у инфиле овде,
што је наша друга командне линије аргумента.
Проверава да се уверите да можемо отворити датотеку.
Проверава да ли можемо овде направити нову оутфиле.
Онда шта то ради овде, то је у основи само почиње читањем се на битмап фајл од почетка.
Почетак, као што знамо, садржи БИТМАПФИЛЕХЕАДЕР,
па ти низови битова ће директно попунити БИТМАПФИЛЕХЕАДЕР.
Дакле, шта имамо овде говори да БИТМАПФИЛЕХЕАДЕР БФ -
То је наша нова променљива типа БИТМАПФИЛЕХЕАДЕР -
ћемо ставити унутра бф оно што смо прочитали из показивача у, што је наша инфиле.
Колико смо прочитали?
Читамо у колико бајтова треба да садржи цео БИТМАПФИЛЕХЕАДЕР.
Слично томе, то је оно што ми радимо за инфо заглављу.
Дакле, ми смо и даље заједно наше датотеке у инфиле,
и ми читаш те битова и бајтова, а ми смо их се директно прикључују у
у овим случајевима варијабли које смо одлука.
Овде само правиш да ли је растерска растерска.
>> Сада имамо оутфиле, зар не?
Дакле, као што стоји када га направите, то је у суштини празно.
Тако смо у основи створити нову битмапу од нуле.
Оно што ми радимо је да морамо да се уверите да смо копирали у заглављу датотеке
и информације заглављу баш као инфиле има.
Оно што ми радимо је да напише - и не заборавите да је БФ је променљива
типа БИТМАПФИЛЕХЕАДЕР, па шта ми радимо је да користимо само тај садржај
да пишем у оутфиле.
Овде се сећате да смо разговарали о томе заштиту,
колико је важно да се уверите да количина пиксела који имамо је више од 4.
То је прилично корисна формула за израчунавање колико постава имате
обзиром ширина датотеке.
Желим да ви сећате да је у цопи.ц имамо формулу за израчунавање пуњење.
Ок? Дакле, сви запамтити. Сјајно.
Па шта онда ради цопи.ц следећи је она пролази кроз све сцанлинес.
Она пролази кроз редове, а потом складишти сваки троструко да чита
и онда је, пише у оутфиле.
Дакле овде читате само један РГБ троструком истовремено
и онда стављате тај исти троструком у оутфиле.
Лукав део је да постава није РГБ троструки,
па не можемо прочитати тај износ Постава од РГБ тројки.
Оно што морамо да урадимо је заправо само кретање наше индикатор датотеке позицију, померите курсор наш,
да врста прескочим све преграде, тако да смо у следећи ред.
И шта онда ово ради је копија вам показује како можда ћете желети да додате пуњење.
Дакле, ми смо израчунати колико постава нам је потребно,
, што значи да нам је потребан Постава број 0с.
Шта ово ради је за петљу која ставља Постава број 0с у нашу оутфиле.
И на крају, можете затворити обе датотеке. Можете затворити инфиле као и оутфиле.
>> Дакле, то је начин цопи.ц ради,
и то ће бити прилично корисна.
Уместо ствари само директно копирање и налепите
или само гледа њега и куцате у шта год желите,
само можда желети да извршите ову команду у терминалу,
цп цопи.ц входунит.ц, који ће креирати нову датотеку, входунит.ц,
који садржи исти садржај као копија ради.
Па шта онда можемо да урадимо је да користимо као оквир на основу којих би се изгради и уређивање
за наше детективски роман датотеку.
>> То су наша на-листе да уради за детективски роман, али шта ради цопи.ц
заправо брине већина њих за нас.
Дакле, све што треба да урадите следеће је да промените пиксела по потреби
да се заиста направи фајл читљив.
Запамтите да је за дату пиксел троструки, тако да за дату променљиву типа РГБТРИПЛЕ,
можете да приступите плаве, зелене и црвене вредности.
То ће доћи у руци јер ако можете да им приступите,
То значи да можете да их провери,
а то значи да можете да их промените.
>> Дакле, када смо се вратили у нашу црвено пример у облику лупе,
основи, који је деловао као нека врста филтера за нас.
Дакле, оно што ми желимо да урадимо јесте желимо да филтрира све тројке које долазе ин
Постоји неколико начина да се то уради.
У суштини, можете имати шта год тип филтера желите.
Можда желите да промените све црвене пикселе
или можда желите да промените другачији пиксел боје у другу боју.
То је на вама.
Запамтите да можете да проверите шта боје пиксела је
и онда можете да промените како ти пролазиш.
>> Ок. Дакле, то је детективски роман.
Када покренете детективски роман, ви ћете знати ко је кривац за злочин био.
>> Сада ћемо да идемо на Ресизе.
Ми ћемо и даље имати посла са битмапе.
Шта ћемо да радимо јесте да ћемо имати битмапу унос
а онда ћемо проћи у великом броју, а затим добити оутфиле битмапу
где је то у суштини наш инфиле смањени са н.
Рецимо мој досије био само један пиксел велики.
Онда, ако је мој н је 3, скалирање по 3, онда бих поновити пиксел н број пута,
тако 3 пута, а затим и да смањи 3 пута, као добро.
Па видиш да сам га скалирање вертикално, као и хоризонтално.
>> А онда ево примера.
Ако имате н = 2, видећете да прва плава пиксел има понавља два пута
хоризонтално као и вертикално два пута.
А онда наставља даље, и тако да имају директан скалирање свог оригиналну слику по два.
>> Дакле, ако смо разрадити Псеудокод за то, желимо да отворите датотеку.
И онда знајући да ако се вратимо овде,
видимо да је ширина за оутфиле ће бити другачији од ширине за инфиле.
Шта то значи?
То значи да је наша информација заглавље ће се променити.
И шта ћемо да урадимо је да ажурирате информације заглавља,
знајући да када читамо у списима ако ради на цопи.ц оквира,
већ имамо променљиву која показује шта је величина и такве ствари.
Дакле, кад имате, оно што можда ћете желети да урадите је да промените те посебне променљиве.
Запамтите, ако имате струцт, како приступате променљиве унутар тога.
Ви користите дот оператера, зар не?
Дакле користи да знате да ћете морати да промените информације заглавља.
Дакле, овде је само списак актуелних елемената који ће бити промена у датотеци.
Величина датотеке ће се мења, слике, као и ширину и висину.
Па онда да се вратимо на мапи на растерске,
погледај да ли је датотека заглавља или заглавље Информације које садржи такве информације
а затим промените по потреби.
Опет, кажем цп цопи.ц ресизе.ц.
То значи да ресизе.ц сада садржи све што је садржано у копији
јер копија нам даје начин читања у сваком пикселу Сцанлине по пикселу.
Осим сада, уместо да само мењају вредности као што смо урадили у детективски роман,
оно што ми желимо да урадимо јесте да желим да пишем у више тачака
док је наш н је већи од 1.
>> Онда оно што ми желимо да урадимо јесте желимо да га се протежу хоризонтално н,
као и да је протежу вертикално н.
Како бисмо то урадили?
Рецимо ваш н 2 и имате овај дао инфиле.
Ваш курсор ће почети у првом,
и шта желите да урадите, ако је н 2, желите да штампате у 2 од њих.
Тако да штампате у 2 од њих.
Онда курсор ће да се креће на следећи пиксела, што је црвени,
и то це да одштампате 2 од тих црвене, додавање га на оно што је раније урађено.
Затим ће се померити курсор на следећу пиксел и скрене у 2 од њих.
Ако се осврнете на цопи.ц оквира, шта то чини овде
се ствара нову инстанцу РГБ трипле, нова променљива зове троструки.
И овде када се чита у њу, она чита са инфиле 1 РГБТРИПЛЕ
и да га чува унутар тог троструког променљиве.
Па онда заправо имају променљиву која представља тај одређени пиксел.
Онда када пишете, шта ћете можда желети да урадите је да обложити је фврите изјави у за петље
која га пише у свој оутфиле онолико пута колико је потребно.
То је једноставно довољно.
Само у основи поновите процес писања н број пута да га скали хоризонтално.
>> Али, онда морамо имати на уму да је наш постава се неће променити.
Раније рећи да смо имали нешто дужине 3.
Онда ћемо само да додамо колико постава? Само још један да буде више од 4.
Али рећи да смо скалирање ову конкретну слику са н = 2.
Па онда колико плаво пиксела би смо на крају? Ми би имали 6.
1, 2, 3, 4, 5, 6. У реду.
6 није дељив са 4. Шта је најближа више од 4? То ће бити 8.
Дакле, ми у ствари идемо тамо имају 2 слова постава.
>> Да ли се ико сећа да имамо формулу за израчунавање паддинг
и где би то могао бити?
[Нечујан ученик одговор] >> Да, цопи.ц. Тачно.
Постоји формула у цопи.ц за израчунавање колико постава имате
дао посебну ширину битмап слике.
Дакле то ће бити корисно када је потребно да додате у одређеном износу пуњење
да стварно схватим колико постава морате да додате.
Али, једна напомена, међутим, да ли желите да се уверите да ли користите одговарајућу величину.
Само будите опрезни, јер сте у основи идете да се бави са два битмап слике.
Ви желите да се уверите да ли користите прави.
Када сте обрачуна паддинг за оутфиле, желите да користите ширину оутфиле
а не ширина претходног.
>> Сјајно. Та врста брине се протеже хоризонтално читав битмап слику.
Али оно што ми желимо да урадимо је заправо протежу вертикално као добро.
Ово ће бити мало теже, јер када смо завршили копирање ред
и писање тај ред, наша курсор ће бити на крају.
Дакле, ако смо поново прочитали, онда само ће прочитати на следећој линији.
Дакле, оно што ми желимо да урадимо јесте врста наћи неки начин да копирате опет оне редове
или само врста узимања тог реда, а затим га поново преписивање.
Као што сам некако алудира, постоји неколико начина да се то уради.
Шта можете да урадите је као да идеш кроз и читање преко одређеног Сцанлине
и промена је као неопходно, затим врста продавнице свих тих пиксела у низу.
Онда касније знате да ћете морати да одштампате опет тај низ,
па ви сте користили тај низ да се то уради.
Други начин да то урадите је да би запишите један ред,
Разумем да вам је потребно да копирате то поново, тако да заправо померите курсор,
и да ће се коришћењем метода фсеек.
Могли померите курсор скроз назад, а затим поновите поступак копирања.
>> Дакле, ако је наш број скалирање је н, онда колико пута ћемо морати да се вратимо
и коригујте линију? >> [Ученик] н - 1. >> Да, савршено. н - 1.
Ми смо то урадили једном већ тако, онда ћемо желети да понови поступак иде назад
н - 1 износ времена.
Ок. Тако да имате функцију ресизе.
>> Сада можемо доћи до заиста забаван део, мој омиљени псет, који је опорави.
Уместо битмапе, овај пут имамо посла са ЈПЕГ.
Ми заправо не даје датотеку само за ЈПЕГ,
смо дали смо у суштини сирови формат меморијских картица.
И тако ова садржи мало инфо и смеће вредности у почетку,
а онда почиње и да има гомилу ЈПЕГ фајлова.
Међутим, ми смо предали картицу где смо обрисали фотографије;
суштини, ми смо заборавили где су фотографије се налазе у оквиру картице.
Онда је наш задатак у Спасавање је да прођемо кроз ову картицу формату
и поново пронаћи те слике.
>> Срећом, структура ЈПЕГ фајлова и картице датотека је мало помоћи.
Дефинитивно би то било мало теже ако нисте били у овом конкретном формату.
Сваки ЈПЕГ фајлова заправо почиње са два могућа секвенцама горе наведеним.
У суштини, кад год имате нову ЈПЕГ фајл,
почиње са било низу ффд8 ффе0 или други, ффд8 ффе1.
Још једна корисна ствар коју треба да знате је да су ЈПЕГ цонтигуоусли чувају.
Дакле, кад год неко ЈПЕГ фајлова заврши, други почиње.
Дакле, не постоји никаква између вредности тамо.
Када кликнете на почетак ЈПЕГ, ако сте већ били читања ЈПЕГ,
Ви знате да сте погодили крај претходне и почетак следеће.
>> За врсте визуализује то, направио сам шему.
Још једна ствар у вези ЈПЕГ је да их можемо прочитати у секвенцама 512 бајтова у једном тренутку,
Слично је и са почетка картице.
Ми не треба да се провери сваки бајт јер би безвезе.
Тако, уместо да, оно што можемо да урадимо је заправо само прочитати у 512 бајта у време
и онда, уместо да провере између оних који у тим ситним малим кришке,
можемо само да провери почетак од 512 бајтова.
У суштини, у овој слици, оно што видите је у почетку картице,
имате вредности које нису баш релевантни стварним самих ЈПЕГ.
Али шта онда ја имам је стар да укаже један од два полазних секвенце за ЈПЕГ.
Дакле, кад год видиш звезду, знате да имате ЈПЕГ датотеку.
И онда сваки ЈПЕГ фајлова ће бити неки више од 512 бајтова
али не нужно исте више.
Начин на који ви знате да сте ударио другог ЈПЕГ је ако погодите другу звезду,
други који почиње низ бајтова.
Онда оно што овде имамо јесте да имате црвену ЈПЕГ континуирану датотеку док си ударио звезду,
који је означен новој боји.
Ви наставите и онда ударио још звезду, ударио други ЈПЕГ,
Ви наставите све до краја.
Ви сте на последњем слику овде, розе један.
Ти иди до краја док не удари крај датотеке карактера.
Ово ће бити заиста корисно.
>> Неколико главних такеаваис овде:
Картица датотека не почиње са ЈПЕГ,
али када почне ЈПЕГ, сви ЈПЕГ чувају раме уз раме једни другима.
>> Неки Псеудокод за Спасавање.
Прво, ми ћемо отворити нашу датотеку картица,
и да ће користити нашу датотеку И / О функције.
Ми ћемо поновити следеће процес док смо стигли на крај фајла.
Ми ћемо прочитати 512 бајтова у исто време.
И оно што сам рекао овде јесте да ћемо да га сачувате у бафер,
Дакле, у основи држи тих 512 бајта док не будемо знали шта да раде са њима.
Онда оно што ми желимо да урадимо јесте да желите да проверите да ли смо погодили звезду или не.
Ако смо погодили звезду, ако смо ударио један од полазних секвенци,
онда знамо да смо погодили нову ЈПЕГ датотеку.
Шта ћемо да урадимо је да ћемо желети да креирате нову датотеку у нашем каталогу псет4
да настави да на тај фајл.
Али исто тако, ако смо већ направили ЈПЕГ раније,
онда желим да завршим тај фајл и гурните га псет4 фолдер,
где ћемо имати тај фајл ускладиштена јер ако не наведете да смо завршили тај ЈПЕГ фајл,
онда ћемо имати у основи неодређени износ. У ЈПЕГ никада неће завршити.
Дакле, желимо да се уверите да када читате на ЈПЕГ датотеке и написао да,
желимо да се посебно близу да би се отворили следећу један.
Ми ћемо желети да проверите неколико ствари.
Желимо да провери да ли смо на почетку новог ЈПЕГ са нашим бафер
и ако смо већ нашли пред ЈПЕГ
јер ће незнатно променити свој процес.
Дакле, након што прође кроз све путу и ​​ударио крај фајла,
шта онда ћете желети да урадите је да ћете желети да затворите све фајлове који су тренутно отворени.
То ће вероватно бити последњи ЈПЕГ фајлова које имате,
као и картице фајл који сте се бавили.
>> Последња препрека која треба да се позабаве како да се заиста направи ЈПЕГ датотеку
и како заправо гура у фасциклу.
Тхе псет захтева да сваки ЈПЕГ да вам буде у следећем формату,
где имате тај број. јпг.
Број, чак и ако је 0, зовемо га 000.јпг.
Кад год вам је ЈПЕГ у вашем програму,
ћете желети да га поменемо у циљу да се то нашао.
Шта ово значи?
Морамо врсте пратити колико смо пронашли
а шта је број сваког ЈПЕГ требало да буде.
Овде ћемо искористити спринтф функцију.
Слично иф, који је управо врста отисака вредност напоље у терминалу,
спринтф штампа фајл напоље у фолдер.
И тако шта би урадили да сам имао спринтф, титулу, а онда је стринг тамо,
то би одштампали 2.јпг.
Под претпоставком да сам добро затворио сам фајлове,
која ће садржати фајл који сам био писања напоље.
Али једна ствар је да код који ја имам овде
не сасвим задовољава оно што псет захтева.
Тхе псет захтева да други ЈПЕГ формату би требало да буде именован 002 уместо само 2.
Дакле, када сте одштампали име, онда можда ћете желети да нешто промените чувар места.
>> Да ли се ико сећа како смо омогућавају додатне просторе када смо одштампали нешто?
Да. >> [Ученик] Ти ставити 3 одсто између знака и 2. >> Да, савршено.
Ви ћете ставити 3 у овом случају, јер желимо простор за 3.
% 3д би вероватно вам дати 002.јпг уместо 2.
Први аргумент у спринтф функцију је заправо знак арраи
што смо раније знали као стрингове.
Они воља, некако више као привремено складиштење, чување само резултанта ниске.
Нећете баш да се баве са овим, али морате да га укључите.
>> Знајући да сваки назив фајла има број који заузима три знака,
и онда јпг, колико дуго. ово треба да буде низ?
Избаци број. Колико знакова у наслову, у име?
Дакле, ту је 3 хасхтагс, период, јпг. >> [Ученик] 7. >> 7. Не баш.
Ми ћемо желети 8 јер желимо да омогућава нулте Терминатору као добро.
>> Коначно, само да извуче процес који ћете радити за Рецовер,
имате неку информацију почетак.
Ви се наставити све док не пронађете почетак ЈПЕГ датотеке,
а то може да буде један од два почињу секвенци.
Ви наставите са читањем. Сваки сласх овде представља 512 бајтова.
Ви наставите читање, имајте на читање док наиђете другу стартну секвенцу.
Када имате то, прекинули тренутни ЈПЕГ - у овом случају, то је црвени,
па желите да завршите то.
Хоћеш да спринтф име које у свом псет4 фолдер,
онда желите да отворите нову ЈПЕГ и онда наставите са читањем
док не наиђете на следећу.
Имајте на читање, имајте на читање,
и онда на крају, на крају, ти ћеш доћи до краја датотеке,
па ћете желети да затворите последњу ЈПЕГ које сте радили,
спринтф да у свој псет4 фасциклу, а затим погледајте све слике које сте стечен.
Те слике су заправо слике ЦС50 особља,
па ово је место где бонус забава део псет долази у
је да се такмиче у вашим одељцима да бисте пронашли поздрав у сликама
и сликају са њима да докажу да сте урадили псет
па тако можете видети које је особље су на сликама.
Дакле, онда сликати са особљем. Понекад ћете морати да их јуре доле.
Вероватно су неки од њих ће покушати да побегну од вас.
Можете сликати са њима.
Ово је у току. То није због, када је због псет.
Рок ће бити објављен у спец.
Затим заједно са својим делу, шта год секција узима највише слике
са највише чланова особља ће освојити прилично Ауесоме награду.
То је врста подстицаја да добије ваш псет4 завршио што је брже могуће
јер онда можете добити на посао
лови све различите ЦС50 особља.
То није обавезно, мада, тако да када се слика,
онда сте завршили са псет4.
>> И ја сам завршио са описом 4, тако да хвала свима на доласку.
Срећно са форензику. [Аплауз]
[ЦС50.ТВ]