1 00:00:00,000 --> 00:00:02,700 [Powered by Google Translate] [Праходжанне - Праблема Set 4] 2 00:00:02,700 --> 00:00:05,000 [Zamyla Chan - Гарвардскі універсітэт] 3 00:00:05,000 --> 00:00:07,340 [Гэта CS50. - CS50.TV] 4 00:00:08,210 --> 00:00:11,670 Добра. Прывітанне ўсім, і дабро запрашаем Пакрокавае кіраўніцтва 4. 5 00:00:11,670 --> 00:00:14,270 >> Сёння наш PSET з'яўляецца крыміналістыка. 6 00:00:14,270 --> 00:00:18,080 Судовая экспертыза з'яўляецца вельмі весела PSET, што з'яўляецца праца з растравай файламі 7 00:00:18,080 --> 00:00:21,550 каб даведацца, хто здзейсніў злачынства. 8 00:00:21,550 --> 00:00:24,200 Тады мы ідзем, каб змяніць памеры некаторых графічных файлаў, 9 00:00:24,200 --> 00:00:27,780 Затым мы таксама збіраемся мець справу з сапраўды весела часткі, якая называецца аднаўленне, 10 00:00:27,780 --> 00:00:31,160 , У якім мы ў асноўным перадаў карту памяці 11 00:00:31,160 --> 00:00:34,350 , У якім нехта выпадкова выдаліў усе свае файлы, 12 00:00:34,350 --> 00:00:38,860 і мы папрасілі аднавіць гэтыя файлы. 13 00:00:38,860 --> 00:00:42,910 >> Але спачатку, перш чым мы атрымаем у PSET, я проста хачу павіншаваць ўсіх. 14 00:00:42,910 --> 00:00:45,230 Мы збіраемся ў сярэдзіне гэтага курса. 15 00:00:45,230 --> 00:00:50,070 Віктарына 0, ззаду нас, і мы ў pset4, так што па сутнасці, мы на паўдарозе. 16 00:00:50,070 --> 00:00:55,490 Мы прайшлі доўгі шлях, калі вы паглядзіце на вашыя psets, pset0 і pset1, 17 00:00:55,490 --> 00:00:57,300 так павіншаваць сябе аб тым, 18 00:00:57,300 --> 00:01:00,760 і мы збіраемся, каб патрапіць у некаторыя сапраўды пацешныя рэчы. 19 00:01:00,760 --> 00:01:07,070 >> Такім чынам, наш інструментар для гэтага PSET, зноў жа, замест таго, каб Суда ням-й абнаўленне, 20 00:01:07,070 --> 00:01:13,890 мы можам проста запусціць update50 калі вы ў версіі 17/3 і вышэй прыбора. 21 00:01:13,890 --> 00:01:17,380 Так што не забудзьцеся запусціць update50 - гэта нашмат прасцей, некалькі менш сімвалаў - 22 00:01:17,380 --> 00:01:20,640 каб пераканацца, што вы знаходзіцеся на апошняй версіі прыбора. 23 00:01:20,640 --> 00:01:25,410 Асабліва гэта важна, калі мы update50 пачаць выкарыстоўваць CS50 праверкі. 24 00:01:25,410 --> 00:01:28,700 Таму пераканайцеся, што вы робіце гэта. 25 00:01:28,700 --> 00:01:30,760 >> Для ўсіх падзелаў для гэтага PSET, 26 00:01:30,760 --> 00:01:34,350 мы будзем мець справу з файламі ўваходы і выхады, файлавы ўвод / выснова 27 00:01:34,350 --> 00:01:38,140 Мы збіраемся ісці на мноства праграм, якія маюць справу з масівамі 28 00:01:38,140 --> 00:01:40,350 якія паказваюць на файлы і да таго падобнае, 29 00:01:40,350 --> 00:01:43,050 таму мы хочам пераканацца, што мы сапраўды знаёма і зручна 30 00:01:43,050 --> 00:01:47,990 справу з тым, як уваход і выхад у файлы. 31 00:01:47,990 --> 00:01:52,080 >> У размеркаванні код для гэтай PSET файл з імем copy.c, 32 00:01:52,080 --> 00:01:55,280 і вось, што мы збіраемся знайсці будзе вельмі карысным для нас 33 00:01:55,280 --> 00:02:00,340 таму што мы збіраемся ў канчатковым выніку фактычна капіруеце файл copy.c 34 00:02:00,340 --> 00:02:05,350 і проста змяніць яго трохі, каб быць у стане дасягнуць першыя 2 часткі пастаўленай задачы. 35 00:02:05,350 --> 00:02:09,030 >> І таму тое, як я ўжо казаў, мы маем справу з растравых малюнкаў, а таксама JPEG. 36 00:02:09,030 --> 00:02:13,170 Так на самай справе разумення структуры як гэтыя файлы будуць арганізаваны, 37 00:02:13,170 --> 00:02:16,170 як мы можам на самай справе перакладаць 0 і 1 у структурах 38 00:02:16,170 --> 00:02:19,040 і тое, што мы сапраўды можам зразумець і інтэрпрэтаваць і рэдагаваць, 39 00:02:19,040 --> 00:02:21,000 што будзе сапраўды важна, 40 00:02:21,000 --> 00:02:25,970 так адбываецца ў JPEG і растравых файлаў і разумення структуры з іх. 41 00:02:25,970 --> 00:02:30,780 >> Pset4, як звычайна, пачынаецца з раздзела пытанняў. 42 00:02:30,780 --> 00:02:36,600 Тыя, будзе мець справу з файлавага ўводу / вываду, і вы атрымаеце прывыклі да гэтага. 43 00:02:36,600 --> 00:02:42,520 Тады Частка 1 дэтэктыўны раман, у якім вы далі растравы файл 44 00:02:42,520 --> 00:02:45,630 , Які выглядае накшталт як чырвоныя кропкі на ўсім працягу. 45 00:02:45,630 --> 00:02:52,180 І то ў асноўным тое, што мы збіраемся зрабіць, гэта ўзяць гэты файл і проста змяніць яго крыху 46 00:02:52,180 --> 00:02:54,010 у версіі, што мы можам чытаць. 47 00:02:54,010 --> 00:02:56,000 Па сутнасці, як толькі мы скончым, мы будзем мець той жа файл, 48 00:02:56,000 --> 00:03:02,630 акрамя мы зможам убачыць схаванае паведамленне ўтоена ўсе гэтыя чырвоныя кропкі. 49 00:03:02,630 --> 00:03:07,310 Тады Resize гэта праграма, якая, улічваючы файлаў 50 00:03:07,310 --> 00:03:11,490 , А затым атрымала назву файла, у якім ён выводзіць, а затым прысвойваецца нумар, а таксама, 51 00:03:11,490 --> 00:03:16,850 на самай справе, што памер растравай тым, што цэлае значэнне. 52 00:03:16,850 --> 00:03:19,240 Тады, нарэшце, у нас ёсць Recover PSET. 53 00:03:19,240 --> 00:03:24,160 Нам дадзены карт памяці і затым аднавіць усе фатаграфіі 54 00:03:24,160 --> 00:03:25,920 , Якія былі выпадкова выдаленыя, 55 00:03:25,920 --> 00:03:31,420 але, як мы даведаемся, на самай справе не выдаляецца і выдаляецца з файла; 56 00:03:31,420 --> 00:03:38,470 мы толькі часткова страціла, дзе яны былі ў файле, але мы збіраемся аднавіць гэта. 57 00:03:38,470 --> 00:03:44,950 >> Вялікі. Так адбываецца ў файл I / O у прыватнасці, гэта цэлы спіс функцый, якія вы будзеце выкарыстоўваць. 58 00:03:44,950 --> 00:03:49,840 Вы ўжо бачылі трохі асновы Еореп, FREAD, і FWRITE, 59 00:03:49,840 --> 00:03:54,350 але мы збіраемся глядзець далей у пэўным файле ўводу / вываду функцый, такіх як fputc, 60 00:03:54,350 --> 00:03:56,930 , У якім вы проста напісаць адзін знак за адзін раз, 61 00:03:56,930 --> 00:04:02,000 у FSEEK, дзе вы, здаецца, перамясціць індыкатар пазіцыі файла наперад і назад, 62 00:04:02,000 --> 00:04:05,770 і некаторыя іншыя. Але мы будзем ісці ў гэтым крыху пазней, падчас PSET. 63 00:04:08,050 --> 00:04:13,100 >> Такім чынам, спачатку проста патрапіць у файле ўводу / вываду, перш чым ісці ў PSET, 64 00:04:13,100 --> 00:04:19,860 , Каб адкрыць файл, напрыклад, тое, што вы павінны зрабіць, гэта на самай справе ўсталяваць паказальнік на файл. 65 00:04:19,860 --> 00:04:22,710 Таму ў нас ёсць паказальнік на файл *. 66 00:04:22,710 --> 00:04:27,140 У гэтым выпадку, я тэлефаную яго ў паказальнік, таму што гэта будзе мой INFILE. 67 00:04:27,140 --> 00:04:33,340 І таму я збіраюся выкарыстоўваць функцыю Еореп, а затым імя файла 68 00:04:33,340 --> 00:04:36,360 , А затым рэжым, у якім я буду мець справу з файлам. 69 00:04:36,360 --> 00:04:42,080 Так што "R" у дадзеным выпадку для чытання, "w" для запісу, а затым "" для дадання. 70 00:04:42,080 --> 00:04:44,270 Напрыклад, калі вы маеце справу з входной_файл 71 00:04:44,270 --> 00:04:47,310 і ўсё, што вам трэба зрабіць, гэта прачытаць біты і байты, якія захоўваюцца там, 72 00:04:47,310 --> 00:04:50,420 то вы, верагодна, захочаце выкарыстоўваць "Г" у якасці рэжыму. 73 00:04:50,420 --> 00:04:54,520 Калі вы хочаце на самай справе пісаць, збольшага зрабіць новы файл, 74 00:04:54,520 --> 00:04:57,220 тое, што мы збіраемся зрабіць, гэта мы збіраемся адкрыць новы файл 75 00:04:57,220 --> 00:05:02,410 і выкарыстоўваць "W" рэжым запісу. 76 00:05:02,410 --> 00:05:07,540 >> Такім чынам, калі вы на самой справе чытанне ў файлах, структура выглядае наступным чынам. 77 00:05:07,540 --> 00:05:14,930 Перш за ўсё, уключаць паказальнік на структуру, якая будзе ўтрымліваць байт, якія вы чытаеце. 78 00:05:14,930 --> 00:05:19,830 Так што гэта будзе ў канцы размяшчэнне байт, якія вы чытаеце. 79 00:05:19,830 --> 00:05:23,360 Вы тады збіраецеся паказаць памер, як і ў асноўным, колькі байтаў 80 00:05:23,360 --> 00:05:30,100 Ваша праграма павінна чытаць у файл, памерам у асноўным адзін элемент, 81 00:05:30,100 --> 00:05:32,620 і тады вы будзеце паказваць, колькі элементаў вы хочаце чытаць. 82 00:05:32,620 --> 00:05:34,980 І, нарэшце, вы павінны ведаць, дзе вы чытаеце с, 83 00:05:34,980 --> 00:05:37,580 так што гэта будзе вашай ў паказальнік. 84 00:05:37,580 --> 00:05:41,780 Я колерам, таму што гэтыя FREAD таксама вельмі падобны на FWRITE, 85 00:05:41,780 --> 00:05:47,050 акрамя вас, хочаце, каб пераканацца, што вы выкарыстоўваеце правільны заказ, 86 00:05:47,050 --> 00:05:51,960 Пераканайцеся, што вы на самай справе запіс або чытанне з правага файл. 87 00:05:54,910 --> 00:05:58,610 >> Такім чынам, тое, як і раней, калі ў нас ёсць памер элемента, а таксама шэраг элементаў, 88 00:05:58,610 --> 00:06:00,600 то мы можам пагуляць тут няшмат. 89 00:06:00,600 --> 00:06:06,810 Скажам, у мяне ёсць сабака, структура і так, то я хачу прачытаць двух сабак адначасова. 90 00:06:06,810 --> 00:06:12,450 Што я магу зрабіць, гэта сказаць памер аднаго элемента будзе памер аднаго сабакі 91 00:06:12,450 --> 00:06:14,770 і я збіраюся на самай справе чытаць два з іх. 92 00:06:14,770 --> 00:06:18,290 Акрамя таго, што я мог зрабіць, гэта сказаць, што я толькі збіраюся чытаць адзін элемент 93 00:06:18,290 --> 00:06:21,340 і што адзін элемент будзе памерам два сабакі. 94 00:06:21,340 --> 00:06:24,320 Дык вось аналагічная, як вы можаце відаў пагуляць з памерам і колькасцю 95 00:06:24,320 --> 00:06:28,250 у залежнасці ад таго, што больш інтуітыўна зразумелым для вас. 96 00:06:28,250 --> 00:06:30,810 >> Добра. Такім чынам, зараз мы атрымаем у пісьмовым выглядзе файлаў. 97 00:06:30,810 --> 00:06:36,880 Калі вы хочаце запісаць файл, першы аргумент на самай справе, дзе вы чытаеце с. 98 00:06:36,880 --> 00:06:42,050 Так што ў асноўным дадзеныя, якія вы збіраецеся пісаць у файл, 99 00:06:42,050 --> 00:06:44,490 , Які з'яўляецца з паказальніка ў канцы. 100 00:06:44,490 --> 00:06:47,670 Так што, калі вы маеце справу з PSET, пераканайцеся, што вы не заблыталіся. 101 00:06:47,670 --> 00:06:50,480 Можа быць, ёсць вызначэнне бок аб бок. 102 00:06:50,480 --> 00:06:58,090 Вы можаце выцягнуць азначэнняў ў кіраўніцтве, увёўшы мужчыну, а затым FWRITE, напрыклад, 103 00:06:58,090 --> 00:06:59,950 ў тэрмінале, ці вы можаце звярнуцца да гэтага слайд 104 00:06:59,950 --> 00:07:03,570 і пераканайцеся, што вы карыстаецеся правільны. 105 00:07:03,570 --> 00:07:08,700 Такім чынам, яшчэ раз, для FWRITE, калі ў вас ёсць файл, які вы хочаце запісаць у, 106 00:07:08,700 --> 00:07:14,290 што гэта будзе апошні аргумент, і што гэта будзе паказальнік на гэты файл. 107 00:07:14,290 --> 00:07:18,670 Такім чынам вось як мы маем справу з напісаннем, магчыма, некалькі байт у той час, 108 00:07:18,670 --> 00:07:21,820 але кажуць, што вы проста хочаце напісаць ўсяго адну характару. 109 00:07:21,820 --> 00:07:25,940 Як мы ўбачым пазней у гэтым, напрыклад, у растравыя выявы мы павінны яго выкарыстоўваць. 110 00:07:25,940 --> 00:07:32,180 Вось тады мы можам выкарыстоўваць fputc, па сутнасці, проста паклаўшы адзін знак за раз, CHR, 111 00:07:32,180 --> 00:07:37,050 ў паказальнік, і гэта наш з паказальнікаў няма. 112 00:07:38,700 --> 00:07:41,560 Дык вось, калі мы імкнемся або пісаць у файл, 113 00:07:41,560 --> 00:07:44,690 Размовы адсочваць, дзе мы знаходзімся. 114 00:07:44,690 --> 00:07:47,810 Так што гэта свайго роду курсора, індыкатар пазіцыі файла. 115 00:07:47,810 --> 00:07:54,330 І таму, калі мы пісаць ці чытаць зноў у файл, 116 00:07:54,330 --> 00:07:56,760 файл на самай справе не памятае, дзе яна ёсць, 117 00:07:56,760 --> 00:07:59,270 і так працягваецца ад таго, дзе знаходзіцца курсор. 118 00:07:59,270 --> 00:08:03,970 Гэта можа быць карысна, калі вы хочаце, скажам, чытаць у пэўным колькасці, каб зрабіць нешта 119 00:08:03,970 --> 00:08:06,160 , А затым прачытаць у наступным памеры, 120 00:08:06,160 --> 00:08:10,700 але часам мы маглі б вярнуцца назад або фактычна пачаць з некаторага значэння спасылкі. 121 00:08:10,700 --> 00:08:16,870 Такім чынам, то функцыя FSEEK, што ён робіць, гэта дазваляе нам рухацца курсор ў пэўны файл 122 00:08:16,870 --> 00:08:19,680 пэўную колькасць байт. 123 00:08:19,680 --> 00:08:24,260 І тое, што мы павінны зрабіць, гэта паказаць, дзе спасылкі значэнне. 124 00:08:24,260 --> 00:08:31,520 Так што альбо яна рухаецца наперад або назад ад таго, дзе ў цяперашні час знаходзіцца курсор, 125 00:08:31,520 --> 00:08:35,750 ці мы можам паказаць, што ён проста павінен рухацца ў ад пачатку файла 126 00:08:35,750 --> 00:08:37,090 ці ў канцы файла. 127 00:08:37,090 --> 00:08:41,230 І таму вы можаце перадаць у адмоўных або станоўчых значэнняў да сумы, 128 00:08:41,230 --> 00:08:44,960 і што будзе выгляд перамяшчэння курсора наперад або назад. 129 00:08:46,170 --> 00:08:51,920 >> Перш чым мы пяройдзем у іншы psets, любыя пытанні аб файле I / O? 130 00:08:53,860 --> 00:08:59,990 Добра. Як мы паглыбімся ў прыклады, не саромейцеся, каб спыніць мяне пытанні. 131 00:08:59,990 --> 00:09:06,930 >> Такім чынам, у дэтэктыўны раман, вы перадалі файл малюнка падобныя на гэтую чырвоную на слайдзе, 132 00:09:06,930 --> 00:09:14,510 і, падобна, гэта - букет з чырвоных кропак - і вы сапраўды не ведаю, што там напісана. 133 00:09:14,510 --> 00:09:23,310 Калі ў вас касавокасць, Вы можаце быць у стане бачыць лёгкім блакітнаватым колерам у цэнтры. 134 00:09:23,310 --> 00:09:26,270 Па сутнасці, гэта калі тэкст будзе захаваны. 135 00:09:26,270 --> 00:09:30,270 Існаваў забойства, якое адбылося, і мы павінны высветліць, хто гэта зрабіў. 136 00:09:30,270 --> 00:09:36,760 Для таго каб зрабіць гэта, мы павінны выгляду пераўтварыць гэта малюнак у зручным для чытання фармаце. 137 00:09:36,760 --> 00:09:42,740 Калі вы, хлопцы, ніколі не сутыкаліся з гэтым, часам было б мала наборы 138 00:09:42,740 --> 00:09:48,510 дзе вы бы павелічальнае шкло з чырвонай плёнкай. Любы? Так. 139 00:09:48,510 --> 00:09:52,770 Такім чынам, вы б рукамі нешта накшталт гэтага, вы б павелічальным шклом 140 00:09:52,770 --> 00:09:58,130 з чырвоным фільм па ёй, вы б паставіць яго над малюнкам, 141 00:09:58,130 --> 00:10:03,410 , І вы зможаце ўбачыць паведамленне ўтоена ў ім. 142 00:10:03,410 --> 00:10:07,080 Мы не маем павелічальнае шкло з чырвонай плёнкай, так што замест гэтага мы збіраемся віды стварыць наш уласны 143 00:10:07,080 --> 00:10:09,060 У гэтым PSET. 144 00:10:09,060 --> 00:10:15,760 І таму карыстач будзе ўводзіць дэтэктыўны раман, то ключ,. BMP, 145 00:10:15,760 --> 00:10:18,800 так што гэта INFILE, што гэта чырвоная кропка паведамленні, 146 00:10:18,800 --> 00:10:23,550 а потым яны кажуць verdict.bmp будзе наш выхадны файл. 147 00:10:23,550 --> 00:10:27,900 Такім чынам, ён збіраецца стварыць новую растравых малюнкаў падобны на ключ 1 148 00:10:27,900 --> 00:10:32,600 акрамя як у зручным для чытання фармаце, дзе мы можам убачыць схаванае паведамленне. 149 00:10:32,600 --> 00:10:37,550 >> Паколькі мы збіраемся мець справу з рэдагавання і працы з растравых малюнкаў нейкі, 150 00:10:37,550 --> 00:10:42,400 мы збіраемся выгляду апускання ў ў структуры гэтых растравых файлаў. 151 00:10:42,400 --> 00:10:48,130 Мы пайшлі на гэта трохі ў лекцыі, але давайце паглядзім на іх яшчэ трохі. 152 00:10:48,130 --> 00:10:51,740 Растравыя выявы, па сутнасці толькі размяшчэнне байтаў 153 00:10:51,740 --> 00:10:55,790 дзе мы паказалі, якія байты азначае, што. 154 00:10:55,790 --> 00:11:00,540 Дык вось накшталт як карту растравых малюнкаў 155 00:11:00,540 --> 00:11:08,550 кажуць, што яна пачынаецца з некаторага файлы загалоўкаў, пачынае з некаторай інфармацыяй у там. 156 00:11:08,550 --> 00:11:16,540 Вы бачыце, што каля Байт нумар 14 памер паказваецца ў растравыя малюнкі, 157 00:11:16,540 --> 00:11:18,520 і гэта працягваецца. 158 00:11:18,520 --> 00:11:23,810 Але тое, што мы сапраўды зацікаўленыя ў тут, пачынаючы прыкладна з байта нумар 54. 159 00:11:23,810 --> 00:11:26,060 У нас ёсць гэтыя RGB троек. 160 00:11:26,060 --> 00:11:30,760 Тое, што гэта збіраецца зрабіць, гэта ўтрымліваць фактычныя пікселяў, колер значэння. 161 00:11:30,760 --> 00:11:35,950 Усё, што вышэй, што ў загалоўку некаторую інфармацыю 162 00:11:35,950 --> 00:11:41,240 адпаведнага памеру малюнка, шырыню выявы, а вышыня. 163 00:11:41,240 --> 00:11:44,930 Калі мы ідзем у запаўненне пазней, мы ўбачым, чаму памер малюнка 164 00:11:44,930 --> 00:11:48,670 можа адрознівацца ад шырыні або вышыні. 165 00:11:48,670 --> 00:11:54,240 Такім чынам, каб прадставіць гэтыя - гэтыя растравыя выявы ўяўляюць сабой паслядоўнасці байтаў - 166 00:11:54,240 --> 00:11:59,370 што мы можам зрабіць, гэта сказаць добра, я буду памятаць, што ў індэксе 14, 167 00:11:59,370 --> 00:12:03,380 вось дзе памер, напрыклад, але замест таго, што мы збіраемся зрабіць, каб зрабіць гэта прасцей 168 00:12:03,380 --> 00:12:06,020 будзе апісаць яго структуру. 169 00:12:06,020 --> 00:12:08,880 І так у нас ёсць дзве структуры зрабілі для нас, BITMAPFILEHEADER 170 00:12:08,880 --> 00:12:10,440 і BITMAPINFOHEADER, 171 00:12:10,440 --> 00:12:14,840 і таму, калі мы чытаем у гэты файл, па змаўчанні ён збіраецца ісці ў парадку, 172 00:12:14,840 --> 00:12:22,360 і так, каб яна таксама збіраецца запоўніць ў такіх зменных, як biWidth і biSize. 173 00:12:25,270 --> 00:12:31,230 І, нарэшце, кожны піксель прадстаўлены трыма байтамі. 174 00:12:31,230 --> 00:12:35,500 Па-першае, гэта колькасць сіняга ў піксель, другі гэта колькасць зялёных, 175 00:12:35,500 --> 00:12:41,120 І, нарэшце, колькасць чырвонага, дзе 0 гэта практычна не сіні ці зялёны або няма ні адной чырвонай 176 00:12:41,120 --> 00:12:43,720 , А затым і далей з'яўляецца максімальным значэннем. 177 00:12:43,720 --> 00:12:46,800 Гэтыя шаснаццаткавыя значэння. 178 00:12:46,800 --> 00:12:53,870 Такім чынам, калі мы маем ff0000, тое, што адпавядае максімальнай колькасцю сіняга 179 00:12:53,870 --> 00:12:58,890 і то не зялёныя і не чырвоныя, дык тое, што дасць нам сіне пікселяў. 180 00:12:58,890 --> 00:13:04,190 Тады, калі ў нас ёсць усе Ф.Ф. па ўсіх напрамках, то гэта азначае, што ў нас ёсць белы піксель. 181 00:13:04,190 --> 00:13:11,370 Гэта свайго роду супрацьлегласць Звычайна, калі мы гаворым RGB. Гэта на самай справе адбываецца BGR. 182 00:13:12,750 --> 00:13:18,990 >> Таму, калі мы на самай справе выглядаюць у прыклад растравага малюнка - дазвольце мне выцягнуць адзін тут. 183 00:13:31,560 --> 00:13:33,830 Гэта трохі малы. 184 00:13:39,890 --> 00:13:47,840 Я маштабавання, і мы бачым, што гэта невыразна. Падобна на тое, блокі колеру. 185 00:13:47,840 --> 00:13:50,110 У вас ёсць белыя блокі, а затым чырвоныя блокі. 186 00:13:50,110 --> 00:13:53,700 Калі вы гуляеце ў Microsoft Paint, напрыклад, вы маглі б зрабіць нешта накшталт гэтага 187 00:13:53,700 --> 00:13:58,960 на асноўным толькі жывапіс пэўныя квадраты ў пэўным парадку. 188 00:13:58,960 --> 00:14:08,060 Такім чынам, што гэта азначае ў растравых заключаецца ў наступным. 189 00:14:08,060 --> 00:14:15,710 Тут мы маем першы белыя пікселі, што ўсе 6 з'яўляюцца F, а затым у нас ёсць чырвоныя пікселі, 190 00:14:15,710 --> 00:14:19,910 паказана 0000ff. 191 00:14:19,910 --> 00:14:27,940 І так паслядоўнасць байт, што мы маем паказвае, як растравыя выявы будзе выглядаць. 192 00:14:27,940 --> 00:14:32,230 Так што я зрабіў тут проста напісана ўсе гэтыя байты, а затым афарбаваныя ў чырвоны 193 00:14:32,230 --> 00:14:37,550 так што вы можаце бачыць выгляд, калі вы касавокасць трохі, як гэты выгляд паказвае на ўсьмешлівы твар. 194 00:14:40,180 --> 00:14:46,390 >> Такім чынам, каб праца растравага малюнка, я сабе гэта ў асноўным у выглядзе сеткі. 195 00:14:46,390 --> 00:14:54,940 І так па змаўчанні, кожная радок у табліцы павінна быць кратнай 4 байт. 196 00:15:00,520 --> 00:15:07,060 Калі мы паглядзім на растравыя выявы, вы запаўнення кожнага значэння. 197 00:15:07,060 --> 00:15:17,370 Напрыклад, у вас можа быць чырвоным тут, тут зялёная, сіняя тут, 198 00:15:17,370 --> 00:15:24,950 але вы павінны пераканацца, што выява запаўняецца некалькімі з чатырох байтаў. 199 00:15:24,950 --> 00:15:32,200 Так што калі я хачу, каб мой вобраз, каб быць у трох кварталах шырокі, то я павінен быў бы пакласці пустыя значэння 200 00:15:32,200 --> 00:15:35,640 У апошняй, каб зрабіць яго кратным чатырох. 201 00:15:35,640 --> 00:15:39,530 Дык вось я хацеў бы дадаць у тое, што мы называем абіўка. 202 00:15:39,530 --> 00:15:43,750 Я проста хачу, каб паказаць, што там з х. 203 00:15:44,920 --> 00:15:54,160 Цяпер кажуць, што мы хочам малюнак, якое знаходзіцца ў 7 пікселяў даўжынёй, напрыклад. 204 00:15:54,160 --> 00:15:59,550 У нас ёсць 1, 2, 3, 4, 5, 6, 7, 205 00:16:04,750 --> 00:16:07,000 і ўсё гэта запаўняецца колерам. 206 00:16:07,000 --> 00:16:10,620 Такім чынам, што растравыя выявы працуем, што нам трэба 8-й. 207 00:16:10,620 --> 00:16:12,460 Цяпер у нас ёсць 1, 2, 3, 4, 5, 6, 7. 208 00:16:12,460 --> 00:16:19,360 Нам трэба 8 вочак для растравага малюнка правільна чытаць. 209 00:16:19,360 --> 00:16:25,600 Такім чынам, што мы павінны зрабіць, гэта дадаць у толькі трохі абіўка 210 00:16:25,600 --> 00:16:29,430 каб пераканацца, што ўсе шырыні раўнамернае 211 00:16:29,430 --> 00:16:34,260 і што ўсе шырыні кратнай 4. 212 00:16:42,110 --> 00:16:47,310 І вось я ужо адзначалася раней, запаўненне ў выглядзе х ці хвалістая лінія, 213 00:16:47,310 --> 00:16:53,880 але ў рэальнай растравых малюнкаў абіўка паказваецца шаснаццатковы 0. 214 00:16:53,880 --> 00:16:57,340 Так што быў бы адзін знак, 0. 215 00:16:58,980 --> 00:17:06,329 Што можа спатрэбіцца, з'яўляецца XXD каманды. 216 00:17:06,329 --> 00:17:11,220 Што ён робіць на самай справе паказвае, як падобнае таму, што я рабіў раней з смайлік 217 00:17:11,220 --> 00:17:15,630 Калі я на самой справе раздрукаваць тое, што кожны колер будзе на піксель 218 00:17:15,630 --> 00:17:21,800 , А затым колерам яго, калі вы запускаеце XXD з дапамогай наступных каманд, 219 00:17:21,800 --> 00:17:28,670 то яно будзе на самой справе раздрукаваць тое, што колеры для тых, хто пікселяў. 220 00:17:28,670 --> 00:17:33,810 Тое, што вы павінны зрабіць, гэта тут я паказваю, як-S 54 221 00:17:33,810 --> 00:17:36,530 кажа, што я збіраюся пачаць на 54-м байце 222 00:17:36,530 --> 00:17:40,820 таму што да гэтага, памятаеце, калі мы азірнемся на карце растравых малюнкаў, 223 00:17:40,820 --> 00:17:42,690 Вось і ўсё загалоўкі і таму падобнае. 224 00:17:42,690 --> 00:17:46,280 Але тое, што мы сапраўды клапоцімся аб тым, фактычныя пікселяў, якія паказваюць на колер. 225 00:17:46,280 --> 00:17:52,700 Такім чынам, дадаўшы ў гэты сьцяг,-ы 54, то мы можам убачыць значэння колеру. 226 00:17:52,700 --> 00:17:56,020 І не турбуйцеся пра складаныя сцягамі і да таго падобнае. 227 00:17:56,020 --> 00:18:05,020 У спецыфікацыі пастаўленай задачы, вы будзеце мець ўказанні, як выкарыстоўваць XXD для адлюстравання пікселяў. 228 00:18:07,070 --> 00:18:15,590 Так што калі вы бачыце тут, гэта збольшага выглядае як зялёнае поле, гэтая маленькая рэч. 229 00:18:15,590 --> 00:18:23,610 Я колерам 00ff00 ў асноўным кажуць не сіні, шмат зялёнага, а не чырвонага колеру. 230 00:18:23,610 --> 00:18:26,370 Так што адпавядае зялёны колер. 231 00:18:26,370 --> 00:18:31,920 Як вы бачыце тут, мы бачым зялёны прастакутнік. 232 00:18:31,920 --> 00:18:36,660 Гэты зялёны прастакутнік знаходзіцца ўсяго ў 3 пікселяў у шырыню, так што тое, што мы павінны зрабіць, 233 00:18:36,660 --> 00:18:44,350 каб пераканацца, што выява дзеліцца на 4 шырокі дадаць у дадатковых накладак. 234 00:18:44,350 --> 00:18:49,460 І так, то гэта, як вы бачыце гэтыя 0s тут. 235 00:18:49,460 --> 00:18:54,510 Гэта на самай справе будзе вынік вашай Resize PSET, 236 00:18:54,510 --> 00:19:01,350 па сутнасці прымаючы невялікія растравыя, а затым павялічваючы яго на 4. 237 00:19:01,350 --> 00:19:09,380 І што ж мы бачым, што на самой справе гэта выява знаходзіцца ў 12 пікселяў у шырыню, але 12 з'яўляецца кратным 4, 238 00:19:09,380 --> 00:19:12,940 і таму мы на самай справе не бачу ніякай 0s ў канцы, таму што не трэба дадаваць 239 00:19:12,940 --> 00:19:19,070 таму што ён цалкам запаўняецца. Ён не мае больш месца. 240 00:19:20,720 --> 00:19:23,470 >> Добра. Любыя пытанні аб абіўка? 241 00:19:25,150 --> 00:19:27,460 Добра. Cool. 242 00:19:27,460 --> 00:19:32,520 >> Як я згадваў раней, растравыя выявы проста паслядоўнасць байтаў. 243 00:19:32,520 --> 00:19:39,170 І тое, што ў нас ёсць, замест таго, каб адсочваць, якія менавіта ліку байт 244 00:19:39,170 --> 00:19:47,050 адпавядае пэўнаму элементу, мы фактычна стварылі структуру для прадстаўлення гэтага. 245 00:19:47,050 --> 00:19:50,930 Такім чынам, што мы маем RGBTRIPLE структуры. 246 00:19:50,930 --> 00:19:54,590 Кожны раз, калі ў вас ёсць асобнік RGB тройкі, 247 00:19:54,590 --> 00:20:00,970 таму што гэта тыпу вызначаюць структуру, то вы можаце атрымаць доступ да rgbtBlue зменнай, 248 00:20:00,970 --> 00:20:09,520 Аналагічна зялёны і чырвоны зменных, у якім будзе пазначана, колькі сіняга, зялёнага і чырвонага, 249 00:20:09,520 --> 00:20:11,580 адпаведна, у вас ёсць. 250 00:20:11,580 --> 00:20:16,800 >> Так што, калі ў нас ёсць сіняя набор зменных 0, зялёныя ўстаноўлена далей, 251 00:20:16,800 --> 00:20:22,060 , Што з'яўляецца максімальным значэннем вы можаце мець, а затым чырвоны пераменная ўстаноўлена ў 0, 252 00:20:22,060 --> 00:20:27,870 Затым, якога колеру будзе гэтая тройка RGB ўяўляюць? >> [Студэнт] Green. 253 00:20:27,870 --> 00:20:29,150 Зялёны. Менавіта так. 254 00:20:29,150 --> 00:20:34,480 Гэта будзе карысна ведаць, што кожны раз, калі ў вас ёсць асобнік RGB тройкі, 255 00:20:34,480 --> 00:20:41,340 Вы можаце фактычна атрымаць доступ колькасць кветак - сіні, зялёны і чырвоны - асобна. 256 00:20:43,350 --> 00:20:54,900 >> Цяпер, калі мы казалі аб структуры, давайце зірнем на файл BMP. 257 00:20:54,900 --> 00:20:57,870 Гэтыя структуры для вас. 258 00:20:57,870 --> 00:21:01,820 Тут мы маем BITMAPFILEHEADER структуры. 259 00:21:01,820 --> 00:21:07,610 Цікавым з'яўляецца той памер. 260 00:21:07,610 --> 00:21:12,660 Пазней, у нас ёсць інфармацыя загалоўка, які мае некалькі рэчаў, якія цікавыя для нас, 261 00:21:12,660 --> 00:21:15,480 а менавіта: памер, шырыню і вышыню. 262 00:21:15,480 --> 00:21:19,170 Як мы пойдзем у пазней, калі вы праглядаеце ў ў файл, 263 00:21:19,170 --> 00:21:25,500 ён аўтаматычна счытвае, таму што мы стварылі, каб быць тое ж самае. 264 00:21:25,500 --> 00:21:31,990 Так biSize будзе ўтрымліваць права байт, якія адпавядаюць фактычным памерам малюнка. 265 00:21:34,700 --> 00:21:40,500 А то вось, нарэшце, як мы ўжо казалі, у нас ёсць RGBTRIPLE ЬурейеЕ структуры. 266 00:21:40,500 --> 00:21:46,840 У нас ёсць rgbtBlue, зялёны і чырвоны, звязаных з ім. 267 00:21:48,210 --> 00:21:49,340 >> Вялікі. Добра. 268 00:21:49,340 --> 00:21:56,360 Цяпер, калі мы разумеем, растравыя выявы трохі, разумеем, што ў нас ёсць файл загалоўка 269 00:21:56,360 --> 00:22:00,790 і інфармацыя загалоўкаў, звязаных з ім, а затым пасля гэтага, у нас ёсць цікавыя рэчы 270 00:22:00,790 --> 00:22:05,110 кветак, і гэтыя колеры прадстаўлены RGBTRIPLE структуры, 271 00:22:05,110 --> 00:22:12,710 а тыя, у сваю чаргу, ёсць тры значэння, звязаныя з сіняга, зялёнага і чырвонага. 272 00:22:12,710 --> 00:22:17,270 >> Такім чынам, зараз мы можам выгляд думаеце пра Аднаўленне няшмат. 273 00:22:17,270 --> 00:22:20,130 Выбачайце. Падумайце аб тым, дэтэктыўны раман. 274 00:22:20,130 --> 00:22:25,750 Калі ў нас ёсць ключ файл, тое, што мы хочам зрабіць, гэта прачытаць у яе піксель за пікселем 275 00:22:25,750 --> 00:22:33,860 а то як-то змяніць тыя пікселі, так што мы можам вывесці яго ў зручным для чытання фармаце. 276 00:22:33,860 --> 00:22:41,020 І так, каб вывесьці яго, мы збіраемся напісаць піксель за пікселем ў verdict.bmp файл. 277 00:22:41,020 --> 00:22:45,120 Гэта збольшага многае зрабіць. Мы разумеем, што. 278 00:22:45,120 --> 00:22:49,860 Такім чынам, што мы зрабілі, мы фактычна даў вам copy.c. 279 00:22:49,860 --> 00:22:57,610 Што copy.c робіць, гэта проста робіць дакладную копію дадзенага растравы файл, а затым выводзіць яго. 280 00:22:57,610 --> 00:23:01,900 Такім чынам, гэта ўжо адкрывае файл для вас, гаворыцца ў піксель за пікселем, 281 00:23:01,900 --> 00:23:04,510 а затым запісвае яго ў ў выходны файл. 282 00:23:04,510 --> 00:23:07,080 >> Давайце паглядзім на гэта. 283 00:23:13,390 --> 00:23:18,290 Гэта забеспячэнне належнага выкарыстання, 284 00:23:18,290 --> 00:23:22,640 атрыманне файлаў тут. 285 00:23:22,640 --> 00:23:29,940 Што гэта робіць ён задае ўваходны файл, тое, што мы прайшлі ў Расіі ў входной_файл тут, 286 00:23:29,940 --> 00:23:34,750 якая з'яўляецца нашым другі аргумент каманднага радка. 287 00:23:34,750 --> 00:23:37,640 Праверак, каб пераканацца, што мы можам адкрыць файл. 288 00:23:38,960 --> 00:23:44,860 Правярае, каб пераканацца, што мы можам зрабіць новы выхадны файл тут. 289 00:23:45,630 --> 00:23:53,270 Затым, што яна робіць тут, гэта толькі ў асноўным пачынае чытаць, каб растравы файл з самага пачатку. 290 00:23:53,270 --> 00:23:56,700 У пачатку, як мы ведаем, утрымлівае BITMAPFILEHEADER, 291 00:23:56,700 --> 00:24:03,200 і таму гэтыя паслядоўнасці бітаў будзе наўпрост запоўніць BITMAPFILEHEADER. 292 00:24:03,200 --> 00:24:07,940 Такім чынам, што мы маем тут кажуць, што BITMAPFILEHEADER BF - 293 00:24:07,940 --> 00:24:13,150 Гэта наша новая пераменная тыпу BITMAPFILEHEADER - 294 00:24:13,150 --> 00:24:22,560 мы збіраемся пакласці ўнутр BF тое, што мы чытаем у паказальнік, які з'яўляецца нашым INFILE. 295 00:24:22,560 --> 00:24:23,970 Колькі мы чытаем? 296 00:24:23,970 --> 00:24:32,160 Мы чытаем у колькі байт мы павінны ўтрымлівацца ўсе BITMAPFILEHEADER. 297 00:24:32,160 --> 00:24:34,660 Акрамя таго, гэта тое, што мы робім для інфармацыі загалоўка. 298 00:24:34,660 --> 00:24:39,010 Такім чынам, мы працягваем ўздоўж нашага файла ў INFILE, 299 00:24:39,010 --> 00:24:44,360 і мы чытаем гэтыя біты і байты, і мы падлучыць іх непасрэдна ў 300 00:24:44,360 --> 00:24:47,880 у гэтых выпадках зменныя, якія мы робім. 301 00:24:49,370 --> 00:24:53,800 Тут мы толькі пераканаўшыся, што растравага малюнка растравага малюнка. 302 00:24:57,670 --> 00:25:01,030 >> Цяпер у нас ёсць выхадны файл, так? 303 00:25:01,030 --> 00:25:04,420 Так як ён стаіць, калі мы ствараем, гэта па сутнасці пусты. 304 00:25:04,420 --> 00:25:07,710 Такім чынам, мы ў асноўным ствараем новы растравы з нуля. 305 00:25:07,710 --> 00:25:12,280 Што мы робім гэта, мы павінны пераканацца, што мы капіяваны ў загалоўку файла 306 00:25:12,280 --> 00:25:16,850 і інфармацыйны загаловак гэтак жа, як входной_файл мае. 307 00:25:16,850 --> 00:25:22,850 Што мы робім гэта мы пішам - і памятаеце, што БФ зменную 308 00:25:22,850 --> 00:25:29,300 тып BITMAPFILEHEADER, так што мы робім, мы проста выкарыстоўваем, што ўтрыманне 309 00:25:29,300 --> 00:25:34,980 для запісу ў выхадны файл. 310 00:25:36,550 --> 00:25:38,510 Вось, памятаю, мы гаварылі пра абіўка, 311 00:25:38,510 --> 00:25:47,820 , Як гэта важна, каб пераканацца, што колькасць пікселяў, якое ў нас ёсць, кратнага 4. 312 00:25:47,820 --> 00:25:52,790 Гэта вельмі карысная формула для разліку, колькі ў вас ёсць абіўка 313 00:25:52,790 --> 00:25:57,670 з улікам шырыні вашага файла. 314 00:25:57,670 --> 00:26:04,120 Я хачу вас, хлопцы, памятаеце, што ў copy.c у нас ёсць формула для разліку запаўнення. 315 00:26:04,120 --> 00:26:07,970 Добра? Так што ўсё гэта памятаю. Вялікі. 316 00:26:07,970 --> 00:26:14,050 Такім чынам, што робіць наступны copy.c ён перабірае ўсё Scanlines. 317 00:26:14,050 --> 00:26:23,730 Ён праходзіць праз радкі, а затым захоўвае кожная тройка, што ён чытае 318 00:26:23,730 --> 00:26:26,920 а затым запісвае яго ў выхадны файл. 319 00:26:26,920 --> 00:26:33,120 Такім чынам, то тут мы чытаем толькі адзін RGB патройныя у той час, 320 00:26:33,120 --> 00:26:39,860 , А затым пакласці ў той жа тройку ў выходны файл. 321 00:26:41,120 --> 00:26:48,340 Хітрасць у тым, што абіўка ня RGB тройкі, 322 00:26:48,340 --> 00:26:55,200 і таму мы не можам проста чытаць, што абіўка колькасць троек RGB. 323 00:26:55,200 --> 00:27:01,460 Што мы павінны зрабіць, гэта на самай справе проста перамясціць нашы пазіцыі ў файле індыкатар, перарухаць курсор, 324 00:27:01,460 --> 00:27:06,840 ў выглядзе прапусціць усе водступы, так што мы на наступным радку. 325 00:27:06,840 --> 00:27:12,990 А тое, што гэта робіць копію паказвае вам, як вы можаце дадаць абіўка. 326 00:27:12,990 --> 00:27:14,990 Такім чынам, мы падлічылі, колькі абіўка нам трэба, 327 00:27:14,990 --> 00:27:18,220 так што гэта азначае, што мы павінны абіўка колькасць 0s. 328 00:27:18,220 --> 00:27:24,510 Што гэта робіць цыкл, які ставіць абіўка колькасць 0s ў нашай выходной_файл. 329 00:27:24,510 --> 00:27:31,170 І, нарэшце, вы зачыняеце абодва файла. Вы зачыняеце INFILE, а таксама выходной_файл. 330 00:27:31,170 --> 00:27:34,870 >> Дык вось, як copy.c работ, 331 00:27:34,870 --> 00:27:37,430 і гэта будзе вельмі карысна. 332 00:27:39,720 --> 00:27:43,750 Замест таго каб проста на самай справе прамога капіявання і ўстаўкі 333 00:27:43,750 --> 00:27:46,800 або проста гледзячы на ​​яго, і набраўшы ў тое, што вы хочаце, 334 00:27:46,800 --> 00:27:49,440 Вы можаце проста хачу, каб выканаць гэтую каманду ў тэрмінале, 335 00:27:49,440 --> 00:27:54,520 ср copy.c whodunit.c, які створыць новы файл, whodunit.c, 336 00:27:54,520 --> 00:27:58,330 , Які змяшчае тыя ж зместу, як капіраванне робіць. 337 00:27:58,330 --> 00:28:03,880 Такім чынам, што мы можам зрабіць, гэта выкарыстоўваць яго ў якасці асновы, на якой будуецца і рэдагаваць 338 00:28:03,880 --> 00:28:06,900 для нашых дэтэктыўны раман файл. 339 00:28:08,500 --> 00:28:14,670 >> Гэта нашы з-DOS, каб зрабіць для дэтэктыўны раман, але тое, што робіць copy.c 340 00:28:14,670 --> 00:28:16,730 на самай справе клапоціцца пра большасць з іх для нас. 341 00:28:16,730 --> 00:28:21,900 Так што ўсе мы павінны зрабіць, гэта змяніць наступны пікселяў па меры неабходнасці 342 00:28:21,900 --> 00:28:25,920 на самай справе зрабіць файл для чытання. 343 00:28:25,920 --> 00:28:32,960 Памятаеце, што для дадзенага піксела патройны, так што для дадзенай зменнай тыпу RGBTRIPLE, 344 00:28:32,960 --> 00:28:35,990 Вы можаце атрымаць доступ сінія, зялёныя і чырвоныя значэння. 345 00:28:35,990 --> 00:28:38,670 Гэта збіраецца спатрэбяцца, таму што, калі вы можаце атрымаць да іх доступ, 346 00:28:38,670 --> 00:28:41,770 гэта азначае, што вы таксама можаце праверыць іх, 347 00:28:41,770 --> 00:28:45,430 і гэта азначае, што вы таксама можаце змяніць іх. 348 00:28:45,430 --> 00:28:49,430 >> Таму, калі мы вярнуліся ў наш чырвона напрыклад павелічальнае шкло, 349 00:28:49,430 --> 00:28:53,390 У асноўным, гэта дзейнічае як свайго роду фільтр для нас. 350 00:28:53,390 --> 00:28:58,160 Такім чынам, што мы хочам зрабіць, гэта мы хочам, каб фільтраваць усе з троек, якія уваходзячы 351 00:28:58,160 --> 00:29:01,240 Ёсць некалькі розных спосабаў зрабіць гэта. 352 00:29:01,240 --> 00:29:07,100 У прынцыпе, вы можаце мець любы тып фільтра Вы хочаце. 353 00:29:07,100 --> 00:29:09,890 Можа быць, вы хочаце змяніць усе чырвоныя пікселі 354 00:29:09,890 --> 00:29:13,570 ці, можа быць, вы хочаце змяніць іншага колеру пікселя на іншы колер. 355 00:29:13,570 --> 00:29:15,400 Гэта залежыць ад вас. 356 00:29:15,400 --> 00:29:19,580 Памятаеце, што вы можаце праверыць, які колер пікселя 357 00:29:19,580 --> 00:29:23,000 а затым вы можаце змяніць яго, як вы праходзіце. 358 00:29:24,410 --> 00:29:26,420 >> Добра. Дык вось дэтэктыўны раман. 359 00:29:26,420 --> 00:29:32,760 Як толькі вы запусціце дэтэктыўны раман, вы будзеце ведаць, хто вінаваты злачынства быў. 360 00:29:32,760 --> 00:29:35,540 >> Цяпер мы збіраемся ісці змяніць. 361 00:29:35,540 --> 00:29:37,990 Мы будзем яшчэ мець справу з растравых малюнкаў. 362 00:29:37,990 --> 00:29:40,750 Тое, што мы збіраемся рабіць гэта мы будзем мець ўваходныя растравыя 363 00:29:40,750 --> 00:29:45,890 а потым мы збіраемся прайсці ў шэраг, а затым атрымаць выхадны файл растравага 364 00:29:45,890 --> 00:29:51,380 дзе гэта ў асноўным нашы входной_файл маштабуецца с. 365 00:29:54,670 --> 00:30:01,450 Скажам мой файл быў толькі адзін піксель вялікі. 366 00:30:01,450 --> 00:30:09,100 Тады, калі мая п было 3 гады, маштабаванне на 3, то я хацеў бы паўтарыць, што піксель п колькасць разоў, 367 00:30:09,100 --> 00:30:14,410 так 3 разы, а затым і паменшыце яго 3 разы, а таксама. 368 00:30:14,410 --> 00:30:17,840 Такім чынам, вы бачыце, што я яго маштабавання па вертыкалі, і па гарызанталі. 369 00:30:17,840 --> 00:30:19,680 >> А то вось прыклад. 370 00:30:19,680 --> 00:30:27,590 Калі ў вас ёсць п = 2, вы ўбачыце, што першы сініх пікселяў там паўтараецца два разы 371 00:30:27,590 --> 00:30:30,930 гарызантальна, так і вертыкальна ў два разы. 372 00:30:30,930 --> 00:30:38,040 А тое, што працягваецца, і таму ў вас ёсць прамое маштабаванне зыходнага малюнка на два. 373 00:30:40,920 --> 00:30:47,600 >> Дык вось, калі б мы падрабязна псевдокод для гэтага, мы хочам адкрыць файл. 374 00:30:47,600 --> 00:30:49,880 А потым, ведаючы, што калі мы вернемся сюды, 375 00:30:49,880 --> 00:30:54,540 мы бачым, што шырыня выхадны файл будзе адрознівацца ад шырыні INFILE. 376 00:30:54,540 --> 00:30:56,130 Што гэта значыць? 377 00:30:56,130 --> 00:31:01,230 Гэта азначае, што наша інфармацыя загалоўка зменіцца. 378 00:31:01,230 --> 00:31:03,790 І тое, што мы хочам зрабіць, гэта абнавіць інфармацыю загалоўка, 379 00:31:03,790 --> 00:31:11,820 ведаючы, што калі мы чытаем у файлы, калі вы працуеце на copy.c рамкі, 380 00:31:11,820 --> 00:31:17,570 у нас ужо ёсць пераменная, якая паказвае, які памер і таму падобныя рэчы. 381 00:31:17,570 --> 00:31:24,060 Таму, як толькі ў вас ёсць, што тое, што вы можаце зрабіць, гэта змяніць гэтыя канкрэтныя зменныя. 382 00:31:24,060 --> 00:31:29,380 Памятаеце, калі ў вас ёсць структура, як атрымаць доступ да пераменным ў гэтым. 383 00:31:29,380 --> 00:31:32,080 Вы можаце выкарыстоўваць аператар кропкі, правільна? 384 00:31:32,080 --> 00:31:36,420 Такім чынам, тое, выкарыстоўваючы гэта, вы ведаеце, што вам трэба змяніць загаловак інфармацыі. 385 00:31:36,480 --> 00:31:41,030 Такім чынам, вось толькі спіс фактычных элементаў, якія будуць змены ў вашым файле. 386 00:31:41,030 --> 00:31:45,180 Памер файла будзе мяняцца, малюнкі, а таксама шырыні і вышыні. 387 00:31:45,180 --> 00:31:50,080 Дык вось вяртаючыся да карце растравых малюнкаў, 388 00:31:50,080 --> 00:31:57,730 глядзець на гэта загаловак файла ці інфармацыя загаловак, які змяшчае гэтую інфармацыю 389 00:31:57,730 --> 00:32:00,920 , А затым змяніць пры неабходнасці. 390 00:32:05,010 --> 00:32:12,470 Зноў жа, кажуць CP copy.c Змена памеру. 391 00:32:12,470 --> 00:32:19,270 Гэта азначае, што зараз Змена памеру ўтрымоўвае ўсе, што змяшчаецца ўнутры копію 392 00:32:19,270 --> 00:32:24,490 таму што копія дае нам спосаб чытання, каб кожная радок піксель за пікселем. 393 00:32:24,490 --> 00:32:29,860 Толькі цяпер, замест таго, каб проста змяняючы значэння, як мы гэта рабілі ў дэтэктыўны раман, 394 00:32:29,860 --> 00:32:37,980 тое, што мы хочам зрабіць, гэта мы хочам напісаць у некалькі пікселяў 395 00:32:37,980 --> 00:32:43,580 тых часоў, як наша п больш за 1. 396 00:32:43,580 --> 00:32:47,110 >> Тады тое, што мы хочам зрабіць, гэта мы хочам, каб расцягнуць яго па гарызанталі на п, 397 00:32:47,110 --> 00:32:50,490 а таксама расцягнуць яго па вертыкалі на п. 398 00:32:50,490 --> 00:32:52,710 Як мы можам гэта зрабіць? 399 00:32:52,710 --> 00:32:56,890 Скажыце ваша п 2 і ў вас ёсць гэтая дадзенага INFILE. 400 00:32:56,890 --> 00:32:58,730 Курсор пачне ў першым, 401 00:32:58,730 --> 00:33:03,530 і што вы хочаце рабіць, калі п 2, вы хочаце раздрукаваць у 2-х з іх. 402 00:33:03,530 --> 00:33:05,490 Так што вы друкуеце ў 2 з іх. 403 00:33:05,490 --> 00:33:10,830 Тады ваш курсор будзе пераходзіць да наступнага пікселя, які з'яўляецца чырвоны, 404 00:33:10,830 --> 00:33:18,400 і гэта будзе раздрукаваць 2 з тых чырвоных, дадаючы яго на тое, што ён рабіў раней. 405 00:33:18,400 --> 00:33:26,280 Затым курсор перамяшчаецца да наступнага пікселяў і зрабіць у 2-х з іх. 406 00:33:26,280 --> 00:33:37,180 Калі вы паглядзіце на copy.c рамкі, што яна робіць тут 407 00:33:37,180 --> 00:33:42,830 яно стварае новы асобнік RGB тройка, новая пераменная называецца тройка. 408 00:33:42,830 --> 00:33:50,500 А вось калі ён чытае ў ёй, ён чытае з INFILE 1 RGBTRIPLE 409 00:33:50,500 --> 00:33:53,470 і захоўвае яго ўнутры, што трайная зменнай. 410 00:33:53,470 --> 00:33:57,590 І тады ў вас сапраўды ёсць зменная, якая прадстаўляе канкрэтнага пікселя. 411 00:33:57,590 --> 00:34:05,290 Затым, калі вы пішаце, што вы можаце зрабіць, гэта зачыняць FWRITE заяву ў цыкл 412 00:34:05,290 --> 00:34:11,080 , Які запісвае яго ў свае выходной_файл столькі разоў, колькі неабходна. 413 00:34:17,449 --> 00:34:20,100 Гэта досыць проста. 414 00:34:20,200 --> 00:34:27,590 Проста ў асноўным, паўтараюць працэс напісання п колькасць разоў маштабаваць яго па гарызанталі. 415 00:34:27,590 --> 00:34:32,969 >> Але тады мы павінны памятаць, што нашы абіўка будзе мяняцца. 416 00:34:47,350 --> 00:34:53,020 Раней, скажам, у нас было нешта даўжыні 3. 417 00:34:53,020 --> 00:35:00,130 Тады мы проста дадамо ў тым, колькі абіўка? Яшчэ адзін, каб зрабіць яго кратным 4. 418 00:35:00,130 --> 00:35:10,480 Але сказаць, што мы маштабавання дадзенага малюнка, п = 2. 419 00:35:10,480 --> 00:35:16,300 Такім чынам, колькі сініх пікселяў б мы ў канцы? Мы б 6. 420 00:35:16,300 --> 00:35:21,470 1, 2, 3, 4, 5, 6. Добра. 421 00:35:21,470 --> 00:35:26,580 6 не кратна 4. Што бліжэйшага ліку, кратнага 4? Гэта будзе 8. 422 00:35:26,580 --> 00:35:33,200 Такім чынам, мы фактычна будзем мець 2 сімвала абіўка там. 423 00:35:33,200 --> 00:35:38,720 >> Хто-небудзь памятае, калі ў нас ёсць формула для разліку абіўка 424 00:35:38,720 --> 00:35:41,350 і дзе гэта можа быць? 425 00:35:41,350 --> 00:35:45,160 [Неразборліва адказ студэнта] >> Так, copy.c. Права. 426 00:35:45,160 --> 00:35:49,800 Існуе формула ў copy.c палічыць, колькі ў вас ёсць абіўка 427 00:35:49,800 --> 00:35:53,810 дадзенай канкрэтнай шырыні растравых малюнкаў. 428 00:35:53,810 --> 00:36:02,950 Такім чынам, што гэта будзе карысна, калі трэба дадаць пэўную колькасць абіўка 429 00:36:02,950 --> 00:36:06,160 на самай справе высветліць, колькі абіўка вам трэба дадаць. 430 00:36:10,820 --> 00:36:15,850 Але, звярніце ўвагу, аднак, тое, што вы хочаце, каб пераканацца, што вы выкарыстоўваеце правільны памер. 431 00:36:15,850 --> 00:36:21,410 Толькі будзьце асцярожныя, таму што вы ў асноўным будзем мець справу з двума растравых малюнкаў. 432 00:36:21,410 --> 00:36:23,410 Вы хочаце, каб пераканацца, што вы выкарыстоўваеце правільны. 433 00:36:23,410 --> 00:36:26,820 Калі вы разліку абіўка для выхаднога файла, які вы жадаеце выкарыстоўваць шырыню выходной_файл 434 00:36:26,820 --> 00:36:29,860 , А не шырыні папярэдняга. 435 00:36:29,860 --> 00:36:37,240 >> Вялікі. Такое клапоціцца аб расцяжэнні цэлым растравага малюнка па гарызанталі. 436 00:36:37,240 --> 00:36:41,290 Але тое, што мы хочам зрабіць, на самай справе расцягнуць яго як вертыкальна, так. 437 00:36:41,290 --> 00:36:48,760 Гэта будзе крыху больш складана, таму што калі мы скончылі капіяванне радкоў 438 00:36:48,760 --> 00:36:51,580 і пісаць гэты радок, наш курсор будзе ў канцы. 439 00:36:51,580 --> 00:36:56,210 Такім чынам, калі мы чытаем зноў, то яна проста будзе чытаць у наступным радку. 440 00:36:56,210 --> 00:37:03,660 Такім чынам, што мы хочам зрабіць, гэта выгляд знайсці спосаб капіявання гэтых радкоў зноў 441 00:37:03,660 --> 00:37:12,500 ці проста выгляд, што прымае радок, а затым перапісваць яго зноўку. 442 00:37:14,380 --> 00:37:17,940 Як я накшталт згадваў, існуе некалькі розных спосабаў зрабіць гэта. 443 00:37:17,940 --> 00:37:23,040 Што вы можаце зрабіць, гэта, як вы праходзіце праз чытанне і асабліва Scanline 444 00:37:23,040 --> 00:37:28,560 і змяняючы яе па меры неабходнасці, то выгляд крамы ўсе гэтыя пікселі ў масіве. 445 00:37:28,560 --> 00:37:36,350 Тады ў далейшым вы ведаеце, што вам трэба раздрукаваць гэты масіў зноў, 446 00:37:36,350 --> 00:37:39,830 і таму вы можаце проста выкарыстоўваць гэты масіў, каб зрабіць гэта. 447 00:37:39,830 --> 00:37:44,500 Яшчэ адзін спосаб зрабіць гэта можна скапіяваць на адзін радок ўніз, 448 00:37:44,500 --> 00:37:47,950 разумею, што вам неабходна скапіяваць гэта зноў, так на самай справе, навядзіце курсор, 449 00:37:47,950 --> 00:37:50,950 і гэта будзе метадам FSEEK. 450 00:37:50,950 --> 00:37:56,410 Вы можаце перамясціць курсор ўсе шляхі назад і паспрабуйце працэс капіявання зноў. 451 00:37:56,410 --> 00:38:03,960 >> Так што, калі наша маштабавання ліку п, то колькі разоў мы павінны вярнуцца 452 00:38:03,960 --> 00:38:10,500 і перапісаць лінію? >> [Студэнт] п - 1. >> Так, цалкам. п - 1. 453 00:38:10,500 --> 00:38:14,390 Мы зрабілі гэта адзін раз ужо, так што потым мы хочам паўтарыць працэс вяртання 454 00:38:14,390 --> 00:38:17,460 п - 1 колькасць разоў. 455 00:38:22,730 --> 00:38:25,860 Добра. Так што ў вас ёсць функцыі змены памеру. 456 00:38:25,860 --> 00:38:34,360 >> Цяпер мы можам патрапіць у вельмі цікавае, мой каханы PSET, які з'яўляецца аднаўленне. 457 00:38:34,360 --> 00:38:39,580 Замест таго, растравыя малюнкі, на гэты раз мы маем справу з JPEG. 458 00:38:39,580 --> 00:38:43,370 Мы фактычна не даў свой файл, проста з JPEG, 459 00:38:43,370 --> 00:38:46,600 нам даюць у асноўным сырой фармат карт памяці. 460 00:38:46,600 --> 00:38:51,790 І таму яна ўтрымлівае трохі інфармацыі і смецця значэння ў пачатку, 461 00:38:51,790 --> 00:38:57,240 а затым ён пачынае і мае кучу файлаў JPEG. 462 00:38:57,240 --> 00:39:03,430 Тым не менш, мы ўручылі карту, дзе мы выдалілі фатаграфіі; 463 00:39:03,430 --> 00:39:08,300 па сутнасці, мы забыліся, дзе фатаграфіі знаходзяцца ў межах карты. 464 00:39:08,300 --> 00:39:12,770 Дык вось наша задача ў Аднаўленне павінен прайсці праз гэтую карту фармату 465 00:39:12,770 --> 00:39:16,500 і знайсці гэтыя фатаграфіі яшчэ раз. 466 00:39:16,500 --> 00:39:23,990 >> На шчасце, структура файлаў JPEG і картатэкі трохі карысным. 467 00:39:23,990 --> 00:39:28,850 Гэта, безумоўна, магло б быць крыху больш складана, калі б не было ў дадзеным фармаце. 468 00:39:28,850 --> 00:39:40,160 Кожны файл JPEG на самай справе пачынаецца з двух магчымых паслядоўнасцяў, пералічаных вышэй. 469 00:39:40,160 --> 00:39:42,970 У асноўным, калі ў вас ёсць новы файл JPEG, 470 00:39:42,970 --> 00:39:52,720 яна пачынаецца альбо з паслядоўнасцю FFD8 ffe0 ці іншай, FFD8 ffe1. 471 00:39:52,720 --> 00:39:59,530 Іншая карысная рэч, каб ведаць, што выявы ў фармаце JPEG захоўваюцца бесперапынна. 472 00:39:59,530 --> 00:40:03,380 Таму, калі адзін файл JPEG сканчаецца, а другі пачынаецца. 473 00:40:03,380 --> 00:40:07,070 Так што гэта не любыя прамежкавыя значэння там. 474 00:40:07,070 --> 00:40:15,510 Калі вы дабярэцеся да пачатку JPEG, калі вы ўжо чыталі JPEG, 475 00:40:15,510 --> 00:40:21,800 Вы ведаеце, што вы патрапілі ў канец папярэдняга і пачатак наступнага. 476 00:40:21,800 --> 00:40:25,890 >> Для выгляду візуалізаваць гэта, я зрабіў схему. 477 00:40:25,890 --> 00:40:36,910 Яшчэ адна рэч, аб фармаце JPEG, што мы можам чытаць іх у паслядоўнасці 512 байт за адзін раз, 478 00:40:36,910 --> 00:40:39,380 Аналагічна з пачаткам карт. 479 00:40:39,380 --> 00:40:43,370 Мы не трэба правяраць кожны байт, таму што гэта адстой. 480 00:40:43,370 --> 00:40:48,200 Таму замест таго, што мы можам зрабіць на самай справе толькі што прачытаў у 512 байт, у той час, 481 00:40:48,200 --> 00:40:54,700 , А затым, замест праверкі ў паміж тымі, хто гэтыя маленькія кавалачкі, 482 00:40:54,700 --> 00:40:58,640 мы можам проста праверыць пачатку 512 байт. 483 00:40:58,640 --> 00:41:02,570 Па сутнасці, у гэтай карціне, што вы бачыце ў пачатку карты, 484 00:41:02,570 --> 00:41:08,700 ў вас ёсць каштоўнасці, якія на самай справе не якія адносяцца да фактычным фармаце JPEG сябе. 485 00:41:08,700 --> 00:41:15,830 Але тое, што ў мяне ёсць зоркі, каб паказаць адно з двух зыходных паслядоўнасцяў для JPEG. 486 00:41:15,830 --> 00:41:19,910 Таму, калі вы бачыце зоркі, вы ведаеце, што ў вас ёсць файл JPEG. 487 00:41:19,910 --> 00:41:25,030 А потым кожны файл JPEG будзе кратным 512 байт 488 00:41:25,030 --> 00:41:27,880 але не абавязкова тое ж самае некалькі. 489 00:41:27,880 --> 00:41:32,050 Такім чынам, што вы ведаеце, што вы патрапілі іншага JPEG, калі вы націснеце іншую зорку, 490 00:41:32,050 --> 00:41:39,090 іншы, пачынаючы паслядоўнасць байтаў. 491 00:41:39,090 --> 00:41:43,330 А што ў вас тут у вас ёсць файл JPEG чырвонай працягваецца, пакуль вы націснеце зоркі, 492 00:41:43,330 --> 00:41:45,150 пра што сведчыць новы колер. 493 00:41:45,150 --> 00:41:48,510 Вы працягваеце, а затым вы трапляеце іншай зоркі, вы патрапілі іншага JPEG, 494 00:41:48,510 --> 00:41:50,590 Вы працягваеце ўвесь шлях да канца. 495 00:41:50,590 --> 00:41:53,180 Вы знаходзіцеся на апошняй карціны тут, ружовы. 496 00:41:53,180 --> 00:41:58,220 Вы ісці да канца, пакуль не ўпрэцца ў канец файла характар. 497 00:41:58,220 --> 00:42:00,820 Гэта будзе вельмі карысна. 498 00:42:00,820 --> 00:42:03,170 >> Некалькі асноўны вынас тут: 499 00:42:03,170 --> 00:42:06,670 Картатэцы не пачынаецца з JPEG, 500 00:42:06,670 --> 00:42:13,350 але як толькі пачынаецца JPEG, ўсе выявы ў фармаце JPEG захоўваюцца бок аб бок адзін з адным. 501 00:42:17,520 --> 00:42:20,420 >> Некаторыя псевдокод для аднаўлення. 502 00:42:20,420 --> 00:42:22,570 Па-першае, мы збіраемся адкрыць нашу картатэку, 503 00:42:22,570 --> 00:42:27,500 і гэта будзе з дапамогай нашага файлавага ўводу / высновы. 504 00:42:27,500 --> 00:42:32,430 Мы збіраемся паўтарыць наступны працэс, пакуль мы не дасягнулі канца файла. 505 00:42:32,430 --> 00:42:36,450 Мы збіраемся чытаць 512 байт за адзін раз. 506 00:42:36,450 --> 00:42:39,180 І тое, што я сказаў тут, што мы збіраемся захоўваць яго ў буфер, 507 00:42:39,180 --> 00:42:46,230 так у асноўным трымацца за тых 512 байт, пакуль мы дакладна ведаем, што з імі рабіць. 508 00:42:46,230 --> 00:42:50,300 Тады тое, што мы хочам зрабіць, гэта мы хочам праверыць, ці можам мы патрапілі зорка ці не. 509 00:42:50,300 --> 00:42:57,960 Калі мы патрапілі зоркі, калі б мы трапілі аднаго з зыходных паслядоўнасцяў, 510 00:42:57,960 --> 00:42:59,980 Затым мы ведаем, што мы патрапілі ў новы файл JPEG. 511 00:42:59,980 --> 00:43:08,860 Што мы хочам зрабіць, гэта мы збіраемся хочаце стварыць новы файл у нашым каталогу pset4 512 00:43:08,860 --> 00:43:14,480 працягваць рабіць, што файл. 513 00:43:14,480 --> 00:43:18,220 А акрамя таго, калі мы ўжо зрабілі JPEG і раней, 514 00:43:18,220 --> 00:43:25,620 Затым мы хочам скончыць гэты файл і падштурхнуць яе да pset4 тэчку, 515 00:43:25,620 --> 00:43:29,780 дзе мы будзем мець, што файл захоўваецца, таму што калі мы не паказваем, што мы скончылі, што JPEG файлаў, 516 00:43:29,780 --> 00:43:37,290 тады мы будзем у асноўным маюць нявызначаную суму. JPEG, ніколі не скончыцца. 517 00:43:37,290 --> 00:43:40,840 Такім чынам, мы хочам пераканацца, што, калі мы чытаем у ў файл JPEG і пісаць, што, 518 00:43:40,840 --> 00:43:46,590 Мы хочам адмыслова блізка, што для таго, каб адкрыць наступную. 519 00:43:46,590 --> 00:43:48,430 Мы хочам праверыць некалькі рэчаў. 520 00:43:48,430 --> 00:43:52,880 Мы хочам праверыць, знаходзімся мы ў пачатку новага JPEG з нашым буферам 521 00:43:52,880 --> 00:43:56,780 а таксама, калі мы ўжо знайшлі JPEG да 522 00:43:56,780 --> 00:44:03,930 таму што гэта зменіць ваш працэс няшмат. 523 00:44:03,930 --> 00:44:07,880 Так вось пасля таго як вы прайсці ўвесь шлях і вы патрапілі ў канец файла, 524 00:44:07,880 --> 00:44:11,570 тое, што вы хочаце зрабіць, вы хочаце, каб закрыць усе файлы, якія ў дадзены момант адкрыты. 525 00:44:11,570 --> 00:44:14,100 Гэта, верагодна, будзе апошні файл JPEG, што ў вас ёсць, 526 00:44:14,100 --> 00:44:18,930 а таксама картатэкі, што вы займаліся. 527 00:44:21,940 --> 00:44:28,670 >> Апошняе перашкода, якое нам трэба было вырашыць, як на самой справе зрабіць файл JPEG 528 00:44:28,670 --> 00:44:31,950 і як на самой справе штурхаць яго ў тэчку. 529 00:44:33,650 --> 00:44:39,850 PSET патрабуе, каб кожны JPEG, што вы знайшлі б у наступным фармаце, 530 00:44:39,850 --> 00:44:43,990 дзе ў вас ёсць нумар. JPG. 531 00:44:43,990 --> 00:44:50,750 Нумар, нават калі гэта 0, мы называем гэта 000.jpg. 532 00:44:50,750 --> 00:44:55,730 Кожны раз, калі вы знаходзіце JPEG ў праграму, 533 00:44:55,730 --> 00:44:58,040 Вы збіраецеся хочаце назваць яго ў парадак, у якім ён быў знойдзены. 534 00:44:58,040 --> 00:44:59,700 Што гэта значыць? 535 00:44:59,700 --> 00:45:03,530 Мы павінны выгляду адсочваць, як шмат мы знайшлі 536 00:45:03,530 --> 00:45:08,680 і тое, што колькасць кожнага JPEG павінна быць. 537 00:45:08,680 --> 00:45:13,800 Тут мы збіраемся скарыстацца Sprintf функцыі. 538 00:45:13,800 --> 00:45:17,480 Як і ў Printf, якія толькі часткова адбіткі значэння з у тэрмінал, 539 00:45:17,480 --> 00:45:23,910 Sprintf друкуе файл з ў тэчку. 540 00:45:23,910 --> 00:45:30,870 І што ж гэта будзе рабіць, калі ў мяне было Sprintf, назва, а затым радок ёсць, 541 00:45:30,870 --> 00:45:36,660 было б раздрукаваць 2.jpg. 542 00:45:36,660 --> 00:45:41,020 Калі выказаць здагадку, што я зачыніў файлы правільна, 543 00:45:41,020 --> 00:45:47,210 , Які будзе ўтрымліваць файл, які я пісала з. 544 00:45:47,210 --> 00:45:50,320 Але справа ў тым, што код, які я тут 545 00:45:50,320 --> 00:45:53,360 не цалкам задавальняе тое, што PSET патрабуецца. 546 00:45:53,360 --> 00:46:02,410 PSET патрабуе, каб другі файл JPEG павінны быць названыя 002, а не толькі 2. 547 00:46:02,410 --> 00:46:09,160 Таму, калі вы друкуеце з назвы, то, магчыма, вы захочаце змяніць запаўняльнік няшмат. 548 00:46:09,160 --> 00:46:18,140 >> Хто-небудзь памятае, як мы дазволіць лішнія прабелы, калі мы нешта надрукаваць? 549 00:46:18,140 --> 00:46:22,530 Так. >> [Студэнт] Вы ставіце 3 паміж знакам адсотка і 2. >> Так, цалкам. 550 00:46:22,530 --> 00:46:25,610 Вы будзеце ставіць 3 у дадзеным выпадку, таму што мы хочам прастору для 3. 551 00:46:25,610 --> 00:46:32,590 % 3d, верагодна, дасць вам 002.jpg замест 2. 552 00:46:32,590 --> 00:46:40,120 Першы аргумент у Sprintf функцыі на самай справе масіў сімвалаў, 553 00:46:40,120 --> 00:46:42,520 якія мы раней ведалі як радка. 554 00:46:42,520 --> 00:46:50,700 Тыя, воля, выгляд больш падобны на часовае захоўванне, проста захоўваць выніковую радок. 555 00:46:50,700 --> 00:46:54,950 Вы не будзеце сапраўды мець справу з гэтым, але вы павінны ўключыць яго. 556 00:46:54,950 --> 00:47:00,710 >> Ведаючы, што кожнае імя файла мае нумар, які займае тры сімвала, 557 00:47:00,710 --> 00:47:06,770 і потым. JPG, як доўга гэты масіў можа быць? 558 00:47:09,070 --> 00:47:14,310 Выкіньце нумар. Колькі знакаў у загалоўку, у назве? 559 00:47:18,090 --> 00:47:26,320 Такім чынам, ёсць 3 хэштэгу, перыяд, JPG. >> [Студэнт] 7. >> 7. Не зусім. 560 00:47:26,320 --> 00:47:32,000 Мы збіраемся хочам 8, таму што мы хочам, каб забяспечыць нулявы тэрмінатар, а таксама. 561 00:47:45,340 --> 00:47:49,730 >> Нарэшце, каб выцягнуць працэс, што вы будзеце рабіць для аднаўлення, 562 00:47:49,730 --> 00:47:55,420 ў вас ёсць пачатак інфармацыі. 563 00:47:55,420 --> 00:48:02,460 Вы працягваеце, пакуль не знойдзеце пачатку файла JPEG, 564 00:48:02,460 --> 00:48:07,900 і гэта можа быць альбо адзін з двух стартавых паслядоўнасцяў. 565 00:48:07,900 --> 00:48:12,510 Вы працягвайце чытаць. Кожная рыса тут прадстаўляе 512 байт. 566 00:48:12,510 --> 00:48:22,630 Вы працягвайце чытаць, працягвайце чытаць, пакуль вы не сутыкаецеся іншы пуску. 567 00:48:22,630 --> 00:48:29,790 Калі ў вас ёсць, што вы ў канчатковым бягучага JPEG - у дадзеным выпадку, гэта чырвоны, 568 00:48:29,790 --> 00:48:31,030 так што вы хочаце, каб пакончыць з гэтым. 569 00:48:31,030 --> 00:48:35,540 Вы хочаце, каб Sprintf імя, што ў вашай тэчцы pset4, 570 00:48:35,540 --> 00:48:41,580 то вы хочаце, каб адкрыць новую JPEG, а затым працягвайце чытаць 571 00:48:41,580 --> 00:48:46,370 пакуль вы не сутыкаецеся наступным. 572 00:48:46,370 --> 00:48:49,040 Чытайце далей, працягвайце чытанне, 573 00:48:49,040 --> 00:48:56,290 і, нарэшце, у рэшце рэшт, вы збіраецеся дасягнуць да канца файла, 574 00:48:56,290 --> 00:49:00,360 і так што вы хочаце, каб закрыць апошнюю JPEG, што вы працуеце, 575 00:49:00,360 --> 00:49:08,380 Sprintf, што ў вашым pset4 тэчку, а затым паглядзець на ўсе фатаграфіі, якія вы атрымалі. 576 00:49:08,380 --> 00:49:12,050 Тыя малюнкі, на самай справе фатаграфій CS50 персаналу, 577 00:49:12,050 --> 00:49:16,430 і так гэта калі частка бонуса задавальненне ад PSET прыходзіць у 578 00:49:16,430 --> 00:49:26,310 з'яўляецца тое, што вы соревнуетесь у раздзелах знайсці ТФ ў фатаграфіі 579 00:49:26,310 --> 00:49:34,610 і сфатаграфавацца з імі, каб даказаць, што вы зрабілі PSET 580 00:49:34,610 --> 00:49:37,030 і таму вы можаце ўбачыць, якія супрацоўнікі маюць у сваіх карцінах. 581 00:49:37,030 --> 00:49:41,510 І тады вы робіце здымкі з персаналам. Часам вам давядзецца гнаць іх ўніз. 582 00:49:41,510 --> 00:49:44,680 Верагодна, некаторыя з іх будуць спрабаваць ўцячы ад вас. 583 00:49:44,680 --> 00:49:47,320 Вы сфатаграфавацца з імі. 584 00:49:47,320 --> 00:49:51,190 Гэта працягваецца. Гэта не з-за калі PSET звязана. 585 00:49:51,190 --> 00:49:53,340 Тэрміны будуць абвешчаныя ў спецыфікацыі. 586 00:49:53,340 --> 00:49:58,060 Тады разам з часткі, у залежнасці ад часткі прымае самы фатаграфій 587 00:49:58,060 --> 00:50:04,430 з самага супрацоўнікаў пераможа даволі дзіўны прыз. 588 00:50:04,430 --> 00:50:08,890 Гэта свайго роду стымул, каб атрымаць pset4 завершана як мага хутчэй 589 00:50:08,890 --> 00:50:10,820 таму што тады вы можаце прыступіць да справы 590 00:50:10,820 --> 00:50:14,570 паляванне на ўсе розныя CS50 супрацоўнікаў. 591 00:50:14,570 --> 00:50:17,500 Гэта не абавязкова, хоць, так што як толькі вы атрымаеце фатаграфіі, 592 00:50:17,500 --> 00:50:20,310 Затым вы скончыце з pset4. 593 00:50:20,310 --> 00:50:23,970 >> І я скончыў з Пакрокавае кіраўніцтва 4, так што дзякуй усім, хто прыйшоў. 594 00:50:23,970 --> 00:50:29,330 Поспехаў вам у крыміналістыцы. [Апладысменты] 595 00:50:29,330 --> 00:50:31,000 [CS50.TV]