1 00:00:00,000 --> 00:00:10,210 >> [За възпроизвеждане на музика] 2 00:00:10,210 --> 00:00:13,320 >> ZAMYLA CHAN: удар Да нещата с промяна на размера. 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 outfile, както е посочено по скалата на потребителя. 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 OK. 21 00:01:08,890 --> 00:01:13,280 Така че това ще бъде малко по- сложно, отколкото Кой го направи, но 22 00:01:13,280 --> 00:01:18,310 какво е подобен е, че резервното ще, отново, да се окаже много полезно. 23 00:01:18,310 --> 00:01:23,160 Не забравяйте, че резервното отваря файл, актуализира информацията за хедър за на 24 00:01:23,160 --> 00:01:28,250 outfile, след прочита в Scanline, пиксел по пиксел, писане всеки пиксел 25 00:01:28,250 --> 00:01:30,510 в Scanline изходния файл е. 26 00:01:30,510 --> 00:01:37,040 >> Така че отново, първата стъпка може вероятно бъде да кп, резервното, resize.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 резервното много старателно. 30 00:01:46,600 --> 00:01:47,620 OK. 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 И така, тези, които се съдържат в structs 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 Отново, ние ще се обърнем към нашия надежден подаде I / O библиотека, и погледнете 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, а след това за всеки пиксел на INFILE, ние ще го напиша 69 00:03:56,880 --> 00:04:00,870 два пъти в outfile. 70 00:04:00,870 --> 00:04:02,210 Как да пишем файлове? 71 00:04:02,210 --> 00:04:06,400 Е, ние имаме неуспешно функция, така че сме взели показалеца на STRUCT 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 размер на всяка Scanline мъст е кратен на 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 Сега, за разлика от Кой го направи, и за разлика от копие, а след това INFILE изображение и 81 00:04:42,130 --> 00:04:44,370 outfile файл са различни има различен пълнеж, защото те са 82 00:04:44,370 --> 00:04:46,360 различни ширини. 83 00:04:46,360 --> 00:04:46,690 >> OK. 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 и след това писмено, че в outfile, добавяне на пълнежа, ние 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