1 00:00:00,000 --> 00:00:12,240 >> [Музички] 2 00:00:12,240 --> 00:00:15,870 >> Роб BOWDEN: Здраво, јас сум Роб, ајде да се обиде ова за големина. 3 00:00:15,870 --> 00:00:21,100 Значи, ние сме повторно ќе се започне со во основа копија од copy.c, и 4 00:00:21,100 --> 00:00:22,860 направи неколку промени. 5 00:00:22,860 --> 00:00:26,280 Забелешка веднаш гледаме промени, каде што наместо на проверка за да види дали 6 00:00:26,280 --> 00:00:30,440 argc не еднакви 3, ние сакаме да се провери ако argc не е еднакво на 4, бидејќи 7 00:00:30,440 --> 00:00:34,350 сега ние не сме само земање во infile и outfile, но ние сме, исто така, земајќи ги во 8 00:00:34,350 --> 00:00:38,980 n, која е износот што ние сме скалирање на оригиналната слика од. 9 00:00:38,980 --> 00:00:44,340 Откако ќе бидете сигурни дека тоа, ние само може да конвертира n цел број со користење на atoi. 10 00:00:44,340 --> 00:00:48,760 >> Значи, сега ние ќе треба да се создаде некои псевдоними, само јавете се argv 2 infile, и 11 00:00:48,760 --> 00:00:54,240 argv 3 outfile, бидејќи argv 2 и argv 3 не се многу корисни имиња. 12 00:00:54,240 --> 00:00:58,510 Сега ние сакаме да се провери да бидете сигурни дека n е во рамките на границите ние очекуваме, па 13 00:00:58,510 --> 00:01:02,910 спецификации се наведува дека ако тоа е помала или еднаков на нула, или поголема од 100, 14 00:01:02,910 --> 00:01:08,580 тогаш тоа е невалиден големината фактор, и ние треба да го предупреди корисникот за тоа. 15 00:01:08,580 --> 00:01:13,090 >> Откако ќе бидете надвор од сето тоа, можеме да конечно ги отвориме нашите infile, и ние треба 16 00:01:13,090 --> 00:01:16,270 на грешка проверете, за да бидете сигурни дека отворање не не поради некоја причина. 17 00:01:16,270 --> 00:01:19,860 Ние исто така треба да ги отвориме нашите outfile и повторно грешка проверете, за да бидете сигурни дека 18 00:01:19,860 --> 00:01:21,250 не успеваат поради некоја причина. 19 00:01:21,250 --> 00:01:26,270 Но бидете сигурни дека ако отворањето на outfile не успеа дека ние треба да се затвори 20 00:01:26,270 --> 00:01:29,040 на infile, која веќе беше отворена. 21 00:01:29,040 --> 00:01:33,690 >> Значи, под претпоставка дека не не, а потоа we're - исто како во copy.c-- 22 00:01:33,690 --> 00:01:36,140 ќе прочитате во заглавјето од infile. 23 00:01:36,140 --> 00:01:40,130 Ние ќе бидете сигурни дека тоа е валидна bitmap, но сега ние ќе треба да направите некои 24 00:01:40,130 --> 00:01:41,620 работите малку поинаку. 25 00:01:41,620 --> 00:01:44,870 Значи прво, ние ќе сакате да го се сеќаваат на оригиналниот ширина и висина 26 00:01:44,870 --> 00:01:48,290 на infile, бидејќи ние се случува да се било да е тоа се менува за outfile. 27 00:01:48,290 --> 00:01:53,890 Па сега се сеќавам дека за чудни причини bi.biheight, е негативен, и 28 00:01:53,890 --> 00:01:58,670 па така вистинските висина, во позитивна, ние сакате да се земе апсолутната вредност. 29 00:01:58,670 --> 00:02:02,580 >> Сега, Соочи се случува да биде ист пресметка како што беше во copy.c, 30 00:02:02,580 --> 00:02:06,060 користење на старите ширина, и сега сме всушност, се случува да се промени 31 00:02:06,060 --> 00:02:07,320 што во нашата заглавието. 32 00:02:07,320 --> 00:02:11,200 Па ние ќе да се размножуваат нашите ширина од n, бидејќи ние сме скалирање на ширина од 33 00:02:11,200 --> 00:02:15,100 n, се множи со висина од n, бидејќи ние сме скалирање со n, и сега имаме 34 00:02:15,100 --> 00:02:19,250 пресметката за нова баласт базирани на нова ширина. 35 00:02:19,250 --> 00:02:21,840 >> Па сега ние треба да се променат некои други области во нашата заглавието. 36 00:02:21,840 --> 00:02:26,890 Bi.biSizeImage би требало да биде големина на сите бајти во пиксели 37 00:02:26,890 --> 00:02:28,520 и баласт на сликата. 38 00:02:28,520 --> 00:02:34,190 И така на големината на еден ред на нашата сликата е големината на RGB трокреветни, големината 39 00:02:34,190 --> 00:02:39,430 на еден пиксел, пати повеќе од бројот на пиксели во ред, плус баласт на 40 00:02:39,430 --> 00:02:40,910 на крајот на ред. 41 00:02:40,910 --> 00:02:45,200 А потоа ние ќе ја помножите со апсолутната вредност на нашите висина за да се добие 42 00:02:45,200 --> 00:02:48,350 на вкупниот број на бајти во сликата на податоци. 43 00:02:48,350 --> 00:02:53,050 bf.bfSize е само вкупниот број на бајти во нашата слика на податоци, па 44 00:02:53,050 --> 00:02:56,530 bi.biSizeImage, плус големината на нашата заглавија. 45 00:02:56,530 --> 00:02:59,850 Значи, додавање на големината на bitmap датотека насловот, и големината на битмапа инфо 46 00:02:59,850 --> 00:03:00,800 насловот, во ред. 47 00:03:00,800 --> 00:03:03,170 Па тоа е сите ние треба да промени во нашата заглавија. 48 00:03:03,170 --> 00:03:07,020 Сега ние ќе напише насловот bitmap датотека на нашите outfile, а нашите bitmap инфо 49 00:03:07,020 --> 00:03:09,880 насловот на нашата outfile, а сега ние сме подготвени да тргнат 50 00:03:09,880 --> 00:03:11,990 во текот на актуелните пиксели. 51 00:03:11,990 --> 00:03:15,720 >> Затоа сакаме да iterate преку скенирање линии на infile е. 52 00:03:15,720 --> 00:03:17,730 Затоа сакаме да iterate преку oldheight. 53 00:03:17,730 --> 00:03:20,830 Ова е причината зошто ни е потребно да се потсетиме на оригиналниот висина, пред да го промените 54 00:03:20,830 --> 00:03:23,040 и тоа намалени од n. 55 00:03:23,040 --> 00:03:27,810 Сега ние ќе треба да го прочитате една ред на infile во 56 00:03:27,810 --> 00:03:30,630 тампон големина oldwidth. 57 00:03:30,630 --> 00:03:36,190 Па еве, ние сме freading големина на RGB трокреветни, еден пиксел, и стари ширина на 58 00:03:36,190 --> 00:03:39,760 нив од infile во нашите тампон. 59 00:03:39,760 --> 00:03:43,480 И дека ќе биде цела ред во оваа низа. 60 00:03:43,480 --> 00:03:50,390 Па сега, ние сакаме да iterate n пати да печати ја оваа ред на нашата outfile n пати. 61 00:03:50,390 --> 00:03:52,510 И така тоа е она што овој циклус се прави. 62 00:03:52,510 --> 00:03:57,910 Оваа внатрешна јамка е процесирањето над себе ред, во текот на низа, печатење 63 00:03:57,910 --> 00:04:00,710 секој пиксел во низа n пати. 64 00:04:00,710 --> 00:04:04,510 Па 0. елемент се испечатени n пати, првиот елемент е од 65 00:04:04,510 --> 00:04:05,660 печатени n пати. 66 00:04:05,660 --> 00:04:10,820 И тоа е вид на како ние ќе се хоризонтално скала во outfile и 67 00:04:10,820 --> 00:04:13,390 овој циклус, бидејќи ние сме looping n пати, е како ние ќе се 68 00:04:13,390 --> 00:04:15,580 вертикално скала. 69 00:04:15,580 --> 00:04:19,850 >> Долу тука, можеме да видиме дека ние треба да додадете Соочи на крајот на секој ред. 70 00:04:19,850 --> 00:04:25,050 Тоа е зошто тоа е во внатрешноста на за телефонска линија тоа е печатење на n редови од само 71 00:04:25,050 --> 00:04:28,400 овој ред од infile. 72 00:04:28,400 --> 00:04:32,150 Потоа долу тука, јас ќе одам да ја прескокнете над Соочи во infile, бидејќи еднаш 73 00:04:32,150 --> 00:04:34,560 ние сме направиле со еден ред на infile, ние не се грижат за 74 00:04:34,560 --> 00:04:35,290 што Соочи е. 75 00:04:35,290 --> 00:04:37,110 Ние само сакаме да се дојде до вториот ред. 76 00:04:37,110 --> 00:04:40,870 А потоа ние ќе јамка назад и не сите ова повторно за вториот ред. 77 00:04:40,870 --> 00:04:44,406 >> Конечно, откако ќе завршиш со сето тоа, ние може да го затвори infile, во близина 78 00:04:44,406 --> 00:04:47,430 на outfile, и да се врати 0 затоа што ние сме направиле. 79 00:04:47,430 --> 00:04:50,330 >> Моето име е Роб, и тоа беше менување на големината. 80 00:04:50,330 --> 00:04:54,934 >> [Музички]