[Музыка гуляе] ROB Боуден: Прывітанне, я Роб, давайце паспрабуйце гэта на памер. Такім чынам, мы зноў пачнем з у асноўным копія copy.c і зрабіць некалькі змен. Заўвага адразу мы бачым змены, дзе замест праверкі, каб пераканацца, агдс не роўныя 3, мы хочам праверыць калі агдс ня роўнае 4, так як цяпер мы не проста прымаць у INFILE і выхадны файл, але мы таксама прымаючы пад п, што гэта сума, якую мы маштабаванне зыходны малюнак на. Як толькі мы ў гэтым упэўнены, мы можам проста канвертаваць п да цэлага ліку, выкарыстоўваючы atoi. Такім чынам, зараз мы збіраемся стварыць некаторыя псеўданімы, проста патэлефануеце агду 2 INFILE, і агду 3 выходной_файл, таму агду 2 і агду 3 не вельмі карысным імёны. Цяпер мы хочам праверыць, каб пераканацца, п ў межах мы чакаем, так спец паказвае, што, калі гэта менш або роўныя нулю, або больш, чым 100, то гэта інвалід фактарам змены памеру, і мы павінны папярэдзіць карыстальніка аб тым, што. Пасля таго, як мы за ўсё гэта, мы можам нарэшце, адкрыць наш INFILE, і мы павінны да памылак праверыць, каб пераканацца, што Адкрыццё не прамінуў па некаторых прычынах. Мы таксама павінны адкрыць наш OUTFILE, і зноў памылка праверыць, каб пераканацца, што не прамінуў па некаторых прычынах. Але будзьце ўпэўненыя, калі адкрыццё выходной_файл атрымалася, што мы павінны закрыць входной_файл, які быў ужо адкрыты. Так, калі выказаць здагадку, што не прамінуў, то we're - гэтак жа, як у copy.c-- будзе чытаць ў загалоўку ад INFILE. Мы збіраемся, каб пераканацца, што гэта дзейнічае растравыя, але зараз мы збіраемся зрабіць некаторыя рэчы крыху па-іншаму. Такім чынам, спачатку мы збіраемся хочаце памятаць арыгінальны шырыню і вышыню з INFILE, таму што мы збіраемся змяняецца яго для OUTFILE. Так што цяпер, памятаеце, што для дзіўных прычын bi.biheight, мае адмоўнае значэнне, і таму фактычная вышыня, на станоўчы, мы хачу ўзяць абсалютная значэнне. Цяпер, пракладка будзе тое ж самае Разлік, як гэта было ў copy.c, выкарыстоўваючы стары шырыню, і зараз мы на самай справе адбываецца, каб змяніць Што ў нашым загалоўку. Так што мы збіраемся, каб памножыць нашу шырыню п, так як мы маштабавання шырыню п, памножыць вышыню на п, так як мы маштабавання на п, і цяпер у нас ёсць разлік для новага запаўнення на аснове новай шырыні. Так што цяпер мы павінны змяніць некаторыя Іншыя поля ў нашай загалоўку. Bi.biSizeImage, як мяркуецца, памер усіх байтаў ў пікселях і абіўка малюнка. І такім чынам, памер аднаго радка нашай малюнак памер RGB патройны, памер з аднаго пікселя, раз лік пікселяў ў радку, плюс абіўка ў канец радка. А потым мы збіраемся памножце гэта на абсалютная значэнне нашай вышыні, каб атрымаць Агульная колькасць байтаў ў дадзеных выявы. bf.bfSize проста агульная колькасць байтаў ў нашых дадзеных выявы, таму bi.biSizeImage, плюс Памер нашых загалоўкаў. Такім чынам, даданне ад памеру графічнага файла загаловак, і памер растравага інфармацыя загаловак, ОК. Так вось усё, што трэба змяніць у нашых загалоўкаў. Цяпер мы напішам загаловак растравы файл у наш выхадны файл, і нашай інфармацыі растравага загаловак да нашай OUTFILE, і цяпер мы гатовыя пачаць рухацца па-над фактычных пікселях. Таму мы хочам, каб перабраць радкоў разгорткі ў INFILE ст. Таму мы хочам, каб перабраць oldheight. Вось чаму мы павінны памятаць, Першапачатковая вышыня, перш чым мы яго змяніць і маштабаваць яго на п. Цяпер мы збіраемся, каб прачытаць адзін радок INFILE ў буфер памерам oldwidth. Дык вось, мы freading памер RGB патройны, адзін піксель, і стары шырыня ім з INFILE ў нашай буфера. І гэта будзе цэлая веславаць у гэтым масіве. Так што цяпер, мы хочам перабраць п раз, каб раздрукаваць гэты радок у наш выхадны файл п раз. І так гэта тое, што гэты цыкл робіць. Гэта ўнутраны цыкл ітэрацыі веславаць сябе, па масіве, друку кожны піксель ў масіве п раз. Такім чынам, нулявая элемент друкуецца п раз, першы элемент у цяперашні час надрукаваныя п раз. І гэта свайго роду як мы збіраемся гарызантальна маштабаваць ў выходны файл, і гэты цыкл, так як мы прабягаем п раз, то, як мы збіраемся вертыкальна маштаб. Тут, унізе, мы бачым, што нам трэба дадаць запаўненне ў канцы кожнага радка. Вось чаму гэта ўнутры для завесы які Раздрукаваўшы п радкоў проста гэта адна радок з INFILE. Тады тут, я збіраюся прапусціць абіўка ў INFILE, паколькі пасля мы скончылі з адным побач входной_файл, мы не клапоцімся пра што абіўка была. Мы проста хочам, каб дабрацца да другога радка. А потым мы будзем пятля назад і зрабіць усё гэта зноў для другога шэрагу. Нарэшце, калі мы скончым з усім, што, мы можам закрыць INFILE, недалёка выходной_файл, і вяртанне 0, таму што мы зрабілі. Мяне клічуць Боб, і гэта было змяненне памеру. [Музыка гуляе]