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