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 Во големината, корисникот ќе помине во, преку на командната линија, bitmap слика дека 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 што е слично е дека copy.c волја, повторно, да докаже многу корисни. 23 00:01:18,310 --> 00:01:23,160 Се сеќавам дека copy.c отвора датотека, ажурира заглавието информации за 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 >> Значи, повторно, вашиот прв чекор може да веројатно биде да се cp, copy.c, 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 copy.c многу темелно. 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 Бидејќи имаме нова bitmap, имаме нов наслов информации. 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 struct и гледање кој променливи се наведени таму. 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 зема во покажувач кон struct која ќе содржат бајти кои 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 ако n е еднакво на 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 да бидат копирани n пати. 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 Или тука е recopy метод каде што, по читањето во еден ред во 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 n пати, и секој ред да се биде повторува n пати, како и. 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