[Музыка гуляе] ROB BOWDEN: Прывітанне. Я Роб і давайце памер да гэтай праблемы. Так што мы збіраемся пачаць з copy.c як шаблон, але мы збіраемся быць робіць даволі шмат змен. Цяпер мы бачым, што мы адразу ж робіць не змяніць, дзе мы больш не правяраць для нашага RXC ня роўная 3, але цяпер мы правяраем RC не роўная 4. Паколькі мы таксама хочам ўключыць у дадатак да ў файл і з файлаў аргументы, е, які будзе гэта каэфіцыент, на які мы маштабавання. Таму, як толькі мы ў гэтым упэўнены, мы хочам выкарыстоўваць з сканавання е пераўтварыць радок argv1 да паплаўка. І мы збіраемся захоўваць , Што ў фактар. Гэты дадатковы сімвал пераканаўшыся што мы не на самай справе ўводу нешта накшталт 1.4 ABC у камандным радку. Цяпер мы збіраемся стварыць некалькі псеўданімаў з RV2 і RV3 ня вельмі карысныя імёны. Мы, наадварот, буду называць іх у файл і з файла. Цяпер мы збіраемся, каб пераканацца, што наша фактарам было на самай справе дзейнічае. Такім чынам, калі каэфіцыент менш або роўная нуля ці больш за 100, то, згодна з спецыфікацыя, мы павінны адкінуць гэты фактар. Калі мы ўпэўненыя, што гэта добра, зараз мы можам адкрыць файл н, і мы павінны зрабіць упэўнены, што гэта быў паспяхова адкрыты. Калі гэтага не адбылося, што вернецца пустым. Мы збіраемся адкрыць файл са становішча. І зноў жа, мы хочам праверыць, каб упэўнены, што гэта паспяхова адкрыты. І калі гэта не паспяхова адкрыць, то мы таксама павінны быць упэўненыя, каб закрыць файл н які першапачаткова паспяхова адкрыў, інакш у нас ёсць ўцечка памяці. Так што цяпер мы збіраемся чытаць у бітавай загаловак файла і растравыя інфармацыі загаловак з файла н. Мы збіраемся, каб пераканацца, што н файл быў сапраўдны растравы. ОК. Так што цяпер мы збіраемся пачаць ўнясення некаторых змен. Так, таму што мы збіраемся быць змены рэчы, мы спачатку хочам памятаць стары шырыня файле н. Мы хочам узгадаць старую водступ файл н, выкарыстоўваючы той жа разлік ад copy.c. І зараз мы збіраемся змяніць растравы інфармацыі загалоўка. І таму мы множання і шырыню а вышыня фактарам, паколькі гэта тое, што мы маштабавання па. Мы збіраемся, каб вызначыць, Новая абіўка файла па з выкарыстаннем новай шырыні. І мы збіраемся, каб вызначыць новы памер малюнка, выкарыстоўваючы шэраг байт у адзін шэраг, які збіраецца -Лік пікселяў ў дадзенай радку раз памер піксэлях плюс Колькасць байтаў запаўнення ў канцы з гэтага радка, і памнажаючы ўсё, што па колькасці радкоў, якія мы маем. Так вось колькасць байт мы маем у нашых дадзеных выявы. Bf.Bfsize цяпер будзе лік байтаў ў нашай малюнка бэта плюс Памер нашых загалоўкаў. Так плюс памер загалоўка растравага файла і памер растравага інфармацыя загалоўка. ОК. Дык вось яно што для нашых загалоўкаў. Мы можам запісаць файл галаву і Інфармацыя загалоўка ў наш выхад файл, і мы добра. Цяпер прыйшоў час, каб пачаць на самай справе напісанне піксель дадзеныя ў файл OUT. Мы збіраемся аб'явіць буфер памерам стары шырыня гама троек, і мы збіраецца абвясціць зменную радок анямелі, што мы збіраемся першапачаткова усталёўваецца роўнай адмоўнай 1. Мы ўбачым, што мы збіраемся выкарыстаць што для таго, каб адсочваць, што радок у цяперашні час мы загрузілі у гэты буфер. ОК. Так што цяпер, у адрозненне ад стандартнай версіі, замест ітэрацыі ў пачатковай файл, мы збіраемся для перабору кожнага радок ў файлавыя і высветліць, якая радок у файле ў мы хочам месца ў гэтым шэрагу ў файле па-за. Так перабірае усе радкі ў выхад файл з дапамогай новага вышыню, мы спачатку будзе вызначаць радок у старым падаць мы збіраемся выкарыстаць, якія мы збіраюся зрабіць, прымаючы гэты ток падзеленае на фактар ​​шэраг. Так што адбываецца, каб даць нам радок у старым файле, які мы хочам. Так што цяпер, калі радок анямелі не можа ісці ў стары у, мы збіраемся павінны прачытаць радок што мы хочам у нашай CUR буфера радка. Так як мы збіраемся гэта зрабіць? Па-першае, мы збіраемся высветліць, пазіцыя, якая пачынаецца гэты радок у зыходны файл. Так што пазіцыя будзе міма ўсіх нашых загалоўкаў і Зараз апошнія старыя ў радкоў. І так, колькі байт знаходзяцца ў адной радку? Зноў жа, памер RGB патройныя раз стары шырыня плюс стары абіўка, так вось Лік байтаў ў адным радку. І мы хочам, каб прапусціць міма старых Y радкоў. Такім чынам, мы збіраемся е шукаць і мы выкарыстоўваючы шукаць мноства пачаць з пачатак файла. Мы збіраемся е шукаць на гэтую пасаду ў файле, ставячы сябе на пачатку шэрагу мы хочам чытаць у нашай буфера. Мы збіраемся ўсталяваць радок здранцвенне роўная старой у. Так што цяпер, калі мы пятля назад, і мы хочам выкарыстоўваць гэтую ж радок у нашым па-за файла, то мы не збіраемся чытаць яго зноў без неабходнасці. Так на самай справе, шэраг здранцвенне з'яўляецца проста аптымізацыя. Нарэшце, мы збіраемся, каб прачытаць у бягучая радок стары шырыня гама троек што мы хочам ад зыходнага файла. Так што цяпер з актуальн. Радок утрымлівае пікселі ад зыходны файл, які мы хочам напісаць у файл з. Так што цяпер, гэтак жа, як вышэй, замест ітэрацыі старога файла, мы павінны гэта перабраць новых файлаў радкоў. Ну вось, замест таго, каб ітэрацыі па ўсіх са старых пікселяў, што ў CUR запар, мы хочам перабраць усе пікселяў ў нашым новым файле у гэты канкрэтная радок. Чаму мы хочам, каб гэта зрабіць? Таму што мы бачым тут, што мы не на самай справе абавязкова, выкарыстоўваючы ўсе пікселяў ў зыходным файле. Таму што, калі мы скарачаецца, мы маглі б на самай справе хочаце, каб прапусціць пікселяў. І мы бачым, што гэта - х падзеленае на колькасць фактары - блізка адлюстроўвае тут, дзе мы кажам, у дзеліцца на каэфіцыент, каб высветліць, што стары у-я радок адпавядае Y-га радка ў гэтым новым файле. Цяпер мы збіраемся напісаць усё гэтыя пікселі з старой радкі у нашай новай радка. Як толькі мы гэта зрабілі, мы павінны проста паставіць пракладку ў канцы нашай радкі і мы будзем пятлю назад і працягвацца на працягу усе радкі ў нашым новым файле. У рэшце рэшт, мы павінны закрыць наш стары файл, зачыніць наш новы файл, і вяртанне нуля, таму што ўсё прайшло добра. Мяне клічуць Боб, і гэта было Перапынак. [Музыка гуляе]