1 00:00:00,000 --> 00:00:10,210 >> [Музыка гуляе] 2 00:00:10,210 --> 00:00:13,320 >> ZAMYLA Чан: удар Давайце рэчы з змяненнем памеру. 3 00:00:13,320 --> 00:00:17,710 У змяненні памеру, карыстальнік будзе праходзіць у, праз камандны радок, растравы малюнак, 4 00:00:17,710 --> 00:00:21,860 яны хочуць маштабаваць па шэраг што яны таксама праходзяць у, 5 00:00:21,860 --> 00:00:23,770 у камандным радку. 6 00:00:23,770 --> 00:00:24,690 Як мы гэта робім? 7 00:00:24,690 --> 00:00:28,270 >> Ну, пра ўсё па парадку, давайце разарваць гэты ўніз на крокі. 8 00:00:28,270 --> 00:00:31,510 Вы будзеце жадаць, каб адкрыць INFILE што ў іх ёсць, а таксама 9 00:00:31,510 --> 00:00:35,560 стварыць і адкрыць OUTFILE, што вы збіраецеся паставіць 10 00:00:35,560 --> 00:00:38,020 Малюнак з змененым памерам цалі 11 00:00:38,020 --> 00:00:42,050 Тады, таму што вы змены памеру і таму што гэта растравы, гэта загаловак, так 12 00:00:42,050 --> 00:00:46,080 вы збіраецеся таксама абнавіць загаловак інфармацыя для OUTFILE, 13 00:00:46,080 --> 00:00:47,950 і пішуць, што цалі 14 00:00:47,950 --> 00:00:51,850 Тады, вы збіраецеся чытаць у Scanline з INFILE, 15 00:00:51,850 --> 00:00:56,890 піксель за пікселем, змена памеру па гарызанталі і пісаць гэтыя пікселі ў 16 00:00:56,890 --> 00:01:00,910 выходной_файл, як паказана па шкале карыстальніка. 17 00:01:00,910 --> 00:01:03,940 >> Вы збіраецеся забудзьцеся дадаць водступы па меры неабходнасці. 18 00:01:03,940 --> 00:01:05,400 Больш падрабязна аб гэтым пазней. 19 00:01:05,400 --> 00:01:07,790 А потым, таксама змяняць памеры па вертыкалі. 20 00:01:07,790 --> 00:01:08,890 ОК. 21 00:01:08,890 --> 00:01:13,280 Так што гэта будзе крыху больш складаней, чым, хто гэта зрабіў, але 22 00:01:13,280 --> 00:01:18,310 што падобна, што copy.c будзе, зноў жа, апынуцца вельмі карысным. 23 00:01:18,310 --> 00:01:23,160 Памятаеце, што copy.c адкрывае файл, абнаўляе інфармацыю загалоўка для 24 00:01:23,160 --> 00:01:28,250 выходной_файл, затым счытвае ў радкі разгорткі, піксель за пікселем, пісаць кожны піксель 25 00:01:28,250 --> 00:01:30,510 у радкі разгорткі выхаднога файла. 26 00:01:30,510 --> 00:01:37,040 >> Такім чынам, яшчэ раз, ваш першы крок мог бы, верагодна, у тым, каб CP, copy.c, Змена памеру 27 00:01:37,040 --> 00:01:40,560 ў каталог PSET5. 28 00:01:40,560 --> 00:01:43,920 Памятаеце, перш чым скапіяваць яго, каб пераканацца, што вы разумееце, 29 00:01:43,920 --> 00:01:46,600 copy.c вельмі старанна. 30 00:01:46,600 --> 00:01:47,620 ОК. 31 00:01:47,620 --> 00:01:49,880 >> Так што давайце адкрыць файл. 32 00:01:49,880 --> 00:01:50,870 Вы ведаеце, як гэта зрабіць. 33 00:01:50,870 --> 00:01:52,600 Я збіраюся пакінуць гэта для вас. 34 00:01:52,600 --> 00:01:56,050 Затым, абновіце інфармацыю загалоўка для OUTFILE. 35 00:01:56,050 --> 00:01:59,240 Таму што ў нас новае растравы малюнак, у нас ёсць новы інфармацыйны загаловак. 36 00:01:59,240 --> 00:02:00,970 Што тут змяняецца? 37 00:02:00,970 --> 00:02:06,000 Ну, памер файла будзе мяняцца таму што мы збіраемся мець больш 38 00:02:06,000 --> 00:02:07,900 пікселяў, чым раней. 39 00:02:07,900 --> 00:02:11,060 Памер малюнка, такім чынам, таксама зменіцца, як гэта 40 00:02:11,060 --> 00:02:13,050 шырыня і вышыня. 41 00:02:13,050 --> 00:02:17,180 >> Такім чынам, якія зменныя з'яўляюцца тыя, дакладна? 42 00:02:17,180 --> 00:02:20,960 Ну, калі вы паглядзіце ў загаловак інфармацыя, вы бачыце там 43 00:02:20,960 --> 00:02:25,640 biSizeImage, якая ўяўляе сабой вынік Памер выявы ў байтах, 44 00:02:25,640 --> 00:02:28,340 у тым ліку пікселяў і дапаўненні. 45 00:02:28,340 --> 00:02:32,520 biWidth з'яўляецца шырыня выявы ў пікселях, мінус абіўка. 46 00:02:32,520 --> 00:02:35,580 biHeight гэта вышыня выявы ў пікселях. 47 00:02:35,580 --> 00:02:39,200 І таму тыя, якія ўтрымліваюцца ў Структуры BITMAPFILEHEADER і 48 00:02:39,200 --> 00:02:40,390 BITMAPINFOHEADER. 49 00:02:40,390 --> 00:02:45,300 Вы можаце сказаць, які з іх, якія па збіраецца bmp.h і, гледзячы на 50 00:02:45,300 --> 00:02:49,670 BITMAPINFOHEADER структура і бачанне якія зменныя пералічаныя там. 51 00:02:49,670 --> 00:02:54,700 >> Такім чынам, каб абнавіць outfiles загаловак інфармацыя, вы будзеце жадаць, каб 52 00:02:54,700 --> 00:02:57,025 змяніць гэтыя значэння вышыня і шырыня. 53 00:02:57,025 --> 00:03:00,570 Але хутчэй за ўсё, вы, магчыма, спатрэбіцца некаторы інфармацыі загалоўка ў INFILE ў 54 00:03:00,570 --> 00:03:03,670 пазней, так што лепш, каб адсочваць і іншае. 55 00:03:03,670 --> 00:03:07,770 Але будзьце вельмі ясна з вашым зменнай імёны, так што вы выпадкова не 56 00:03:07,770 --> 00:03:12,490 напісаць няправільныя значэння ў загаловак для OUTFILE. 57 00:03:12,490 --> 00:03:16,160 >> Так што цяпер давайце пяройдзем да чытання ў Scanline піксель-на-піксель. 58 00:03:16,160 --> 00:03:20,210 Зноў жа, мы збіраемся звярнуцца да нашай красамоўных файл бібліятэкі ўводу / высновы, і паглядзець на 59 00:03:20,210 --> 00:03:22,100 FREAD функцыя. 60 00:03:22,100 --> 00:03:26,150 FREAD займае ў паказальнік на структуру , Які будзе ўтрымліваць байты, 61 00:03:26,150 --> 00:03:30,130 вы чытаеце ў, памер кожнай элемент, які вы чытаеце - 62 00:03:30,130 --> 00:03:34,410 зноў, SizeOf будзе карысна функцыянаваць тут, лік 63 00:03:34,410 --> 00:03:38,820 элементы памер, памер, што вы знаходзіцеся чытанне, і затым, нарэшце, 64 00:03:38,820 --> 00:03:41,310 inpointer, файл, які вы чытаеце с. 65 00:03:41,310 --> 00:03:46,770 Дык вы прымаеце лік элементаў ад памеру ад inpointer і 66 00:03:46,770 --> 00:03:49,040 пакласці іх у дадзеныя. 67 00:03:49,040 --> 00:03:51,695 >> Цяпер прыйшоў час для змены памеру па гарызанталі. 68 00:03:51,695 --> 00:03:56,880 калі п роўна 2, то для кожнага пікселя ў входной_файл, мы збіраемся запісаць яго 69 00:03:56,880 --> 00:04:00,870 двойчы ў выходны файл. 70 00:04:00,870 --> 00:04:02,210 Як мы пісаць файлы? 71 00:04:02,210 --> 00:04:06,400 Ну, у нас ёсць FWRITE функцыю, таму мы ўзялі паказальнік на структуры 72 00:04:06,400 --> 00:04:10,170 , Які змяшчае байты, вы пісьмовага, а затым мы пераходзім у 73 00:04:10,170 --> 00:04:14,430 Памер, колькасць і выхад, дзе вы збіраецеся пісаць, што. 74 00:04:14,430 --> 00:04:19,200 А потым паўтарыць працэс, будзе стане просты ітэрацыйныя цыкл. 75 00:04:19,200 --> 00:04:21,740 >> Але мы павінны памятаць, дадаць водступы цалі 76 00:04:21,740 --> 00:04:26,040 Канцэпцыя абіўка з'яўляецца тое, што, ну, кожны піксель тры ўкусы, але 77 00:04:26,040 --> 00:04:28,940 Памер кожнага радка належаць сусла быць кратна 4 байта. 78 00:04:28,940 --> 00:04:33,660 Такім чынам, калі колькасць пікселяў ня кратна 4, нам трэба дадаць некаторыя 79 00:04:33,660 --> 00:04:36,630 абіўка, які знаходзіцца ўсяго ў нулі. 80 00:04:36,630 --> 00:04:42,130 Цяпер, у адрозненне ад, хто гэта зрабіў, і ў адрозненне ад копія, то входной_файл малюнак і 81 00:04:42,130 --> 00:04:44,370 выходной_файл файл мае розныя маюць адрозніваецца абіўка, таму што яны 82 00:04:44,370 --> 00:04:46,360 рознай шырыні. 83 00:04:46,360 --> 00:04:46,690 >> ОК. 84 00:04:46,690 --> 00:04:51,050 Так што, магчыма формула будзе спатрэбіцца тут. 85 00:04:51,050 --> 00:04:55,120 Я пакіну гэта для вас, каб знайсці яго, але вам сказаць, што, каб напісаць абіўка, 86 00:04:55,120 --> 00:04:59,360 ну, гэта проста простая функцыя fputc, якая праходзіць у характары 87 00:04:59,360 --> 00:05:02,200 што вы хочаце напісаць, а потым паказальнік файла, які вы 88 00:05:02,200 --> 00:05:04,280 хочаце напісаць у. 89 00:05:04,280 --> 00:05:08,670 Так што цяпер мы зменены па гарызанталі, а затым выкарыстоўваць водступы, 90 00:05:08,670 --> 00:05:12,030 памятаеце, што вам трэба, каб перанесьці файл Індыкатар становішча, таму што вам 91 00:05:12,030 --> 00:05:14,480 не можа FREAD ў дапаўненні. 92 00:05:14,480 --> 00:05:18,230 Такім чынам, вы хочаце, каб пераканацца, што ваш файл Індыкатар становішча на INFILE 93 00:05:18,230 --> 00:05:19,980 ў правільнай кропкі. 94 00:05:19,980 --> 00:05:23,970 Таму што мы таксама хочам змяніць памер па вертыкалі. 95 00:05:23,970 --> 00:05:27,090 Мы не можам проста расцягнуць яго па гарызанталі, таму што кожны патрэбы радкоў 96 00:05:27,090 --> 00:05:30,370 павінны быць скапіяваныя п раз. 97 00:05:30,370 --> 00:05:33,050 >> Зараз ёсць некалькі розных спосабаў зрабіць гэта. 98 00:05:33,050 --> 00:05:39,010 Так што, мы можам выкарыстоўваць метад перазапісу, у што мы памятаем усе пікселі 99 00:05:39,010 --> 00:05:42,840 з дадзеная радок у масіве, і то мы пішам гэты масіў як 100 00:05:42,840 --> 00:05:44,730 столькі разоў, колькі гэта неабходна. 101 00:05:44,730 --> 00:05:49,530 Або ёсць спосаб перапісаць дзе, пасля чытання ў адзін шэраг у INFILE 102 00:05:49,530 --> 00:05:53,530 а затым пісьмовай форме, што ў выходны файл, дадаўшы запаўненне, мы FSEEK 103 00:05:53,530 --> 00:05:57,250 назад да пачатку зыходнай радкі, а затым паўтарыце гарызантальная 104 00:05:57,250 --> 00:05:58,710 змяненне памеру адтуль. 105 00:05:58,710 --> 00:06:02,280 Незалежна ад метаду, тым не менш, вы будзеце хачу, каб кожны піксель паўтарацца 106 00:06:02,280 --> 00:06:06,370 п раз, і кожны радок будзе паўтараецца п раз, а таксама. 107 00:06:06,370 --> 00:06:09,160 >> Пры тым, што вы будзеце мець кропкавы малюнак больш, чым жыццё. 108 00:06:09,160 --> 00:06:11,760 Мяне клічуць Zamyla, і гэта CS50. 109 00:06:11,760 --> 00:06:19,542