1 00:00:00,000 --> 00:00:00,996 2 00:00:00,996 --> 00:00:12,470 >> [MUSIK SPELA] 3 00:00:12,470 --> 00:00:13,210 >> ROB BOWDEN: Hej. 4 00:00:13,210 --> 00:00:16,870 Jag är Rob och låt oss storlek upp detta problem. 5 00:00:16,870 --> 00:00:20,990 Så vi kommer att börja med copy.c som en mall, men vi kommer att vara 6 00:00:20,990 --> 00:00:23,340 göra en hel del förändringar. 7 00:00:23,340 --> 00:00:27,570 >> Nu ser vi att vi omedelbart göra en ändra där vi inte längre kontroll 8 00:00:27,570 --> 00:00:31,560 för vårt RXC inte är lika 3, men nu Vi kollar rc inte lika 4. 9 00:00:31,560 --> 00:00:34,670 Eftersom vi vill också att i Utöver de i fil och ut filer 10 00:00:34,670 --> 00:00:39,550 argument, f, som kommer att vara här faktor med vilken vi skalning. 11 00:00:39,550 --> 00:00:45,430 >> Så när vi är säkra på det, vill vi Använd s scan f för att konvertera strängen 12 00:00:45,430 --> 00:00:49,030 argv1 till ett flöte. 13 00:00:49,030 --> 00:00:51,330 Och vi kommer att lagra att i faktor. 14 00:00:51,330 --> 00:00:55,180 Denna extra karaktär är att se att vi inte faktiskt anger 15 00:00:55,180 --> 00:00:59,200 något i stil med 1,4 ABC på kommandoraden. 16 00:00:59,200 --> 00:01:02,960 >> Nu ska vi skapa några alias eftersom RV2 och RV3 inte 17 00:01:02,960 --> 00:01:04,310 mycket hjälp namn. 18 00:01:04,310 --> 00:01:07,660 Vi är, i stället, kommer att kalla dem i filen och ut filen. 19 00:01:07,660 --> 00:01:11,580 Nu ska vi se till att vår faktor var faktiskt giltigt. 20 00:01:11,580 --> 00:01:16,330 Så om faktorn är mindre än eller lika med noll eller större än 100, då som per 21 00:01:16,330 --> 00:01:19,660 spec bör vi förkasta denna faktor. 22 00:01:19,660 --> 00:01:23,890 >> När vi är säkra på att det är bra, nu kan vi Öppna n filen, och vi måste göra 23 00:01:23,890 --> 00:01:25,950 Se till att den framgångsrikt öppnades. 24 00:01:25,950 --> 00:01:28,630 Om det inte kommer att returnera null. 25 00:01:28,630 --> 00:01:30,390 Vi kommer att öppna ut filen. 26 00:01:30,390 --> 00:01:33,420 Och återigen, vi vill kontrollera att säker på att det öppnat. 27 00:01:33,420 --> 00:01:37,270 Och om det inte lyckas öppna, då Vi måste också se till att stänga 28 00:01:37,270 --> 00:01:40,870 n filen som ursprungligen framgångsrikt öppnat, annars har vi en 29 00:01:40,870 --> 00:01:42,600 minnesläcka. 30 00:01:42,600 --> 00:01:46,350 >> Så nu ska vi läsa i bitmap filhuvudet och bitmap info 31 00:01:46,350 --> 00:01:48,890 header från n-filen. 32 00:01:48,890 --> 00:01:52,360 Vi ska se till att n-filen var en giltig bitmapp. 33 00:01:52,360 --> 00:01:52,640 OK. 34 00:01:52,640 --> 00:01:55,100 >> Så nu ska vi börja att göra några ändringar. 35 00:01:55,100 --> 00:01:58,840 Så för att vi ska kunna ändra saker, först vill vi minnas 36 00:01:58,840 --> 00:02:01,510 gamla bredden på n-fil. 37 00:02:01,510 --> 00:02:05,160 Vi vill komma ihåg den gamla stoppningen av n fil med samma beräkning 38 00:02:05,160 --> 00:02:06,990 från copy.c. 39 00:02:06,990 --> 00:02:09,840 >> Och nu ska vi ändra bitmappen info huvudet. 40 00:02:09,840 --> 00:02:13,630 Och så vi multiplicera både bredden och höjden av faktor eftersom 41 00:02:13,630 --> 00:02:15,750 det är vad vi skalning av. 42 00:02:15,750 --> 00:02:18,420 Vi kommer att bestämma det ny stoppning av filen genom att 43 00:02:18,420 --> 00:02:21,140 med användning av den nya bredden. 44 00:02:21,140 --> 00:02:27,330 Och vi kommer att bestämma den nya storleken på bilden med hjälp av antalet 45 00:02:27,330 --> 00:02:31,610 byte i en enda rad, som kommer att vara lika med antalet bildelement i denna rad 46 00:02:31,610 --> 00:02:35,960 gånger större än en pixel plus antalet byte av stoppning i slutet 47 00:02:35,960 --> 00:02:40,310 i den raden, och multiplicera allt med antalet rader som vi har. 48 00:02:40,310 --> 00:02:43,800 Så det är antalet byte Vi har i våra bilddata. 49 00:02:43,800 --> 00:02:48,190 >> Bf.Bfsize nu kommer att vara nummer byte i vår bild beta plus 50 00:02:48,190 --> 00:02:49,350 storleken på våra huvuden. 51 00:02:49,350 --> 00:02:53,910 Så plus storlek på bitmap-fil header och storleken hos bitmappen info huvudet. 52 00:02:53,910 --> 00:02:54,510 OK. 53 00:02:54,510 --> 00:02:56,440 Så det är det för våra huvuden. 54 00:02:56,440 --> 00:02:59,030 Vi kan skriva filen huvudet och info header till vår ut 55 00:02:59,030 --> 00:03:01,590 fil, och vi är bra. 56 00:03:01,590 --> 00:03:03,800 >> Nu är det dags att börja faktiskt skriva pixeln 57 00:03:03,800 --> 00:03:05,120 data till ut filen. 58 00:03:05,120 --> 00:03:10,460 Vi kommer att förklara en buffert av storlek gamla bredd RGB tripplar, och vi är 59 00:03:10,460 --> 00:03:13,790 kommer att deklarera en variabel som heter rad stel, vilket är att vi kommer att 60 00:03:13,790 --> 00:03:15,640 ursprungligen lika med -1. 61 00:03:15,640 --> 00:03:19,090 Vi ser att vi kommer att använda att för att hålla reda på vad 62 00:03:19,090 --> 00:03:22,640 rad som vi för närvarande har laddat i denna buffert. 63 00:03:22,640 --> 00:03:23,290 OK. 64 00:03:23,290 --> 00:03:28,750 >> Så nu till skillnad från standardversionen, istället för iteration över på i 65 00:03:28,750 --> 00:03:32,900 fil, kommer vi att iterera över varje rad i den ut filen och räkna ut 66 00:03:32,900 --> 00:03:38,130 vilken rad i i filen vi vill placera i denna rad i ut filen. 67 00:03:38,130 --> 00:03:44,930 Så iterera över alla rader i ut filen med den nya höjden, är vi först 68 00:03:44,930 --> 00:03:48,890 kommer att bestämma den rad i den gamla fil vi kommer att använda, vilket vi är 69 00:03:48,890 --> 00:03:53,560 ska göra genom att ta denna ström rad delat med faktorn. 70 00:03:53,560 --> 00:03:58,000 Så det kommer att ge oss den rad i den gamla filen som vi vill ha. 71 00:03:58,000 --> 00:04:03,310 >> Så nu om rad stel inte är lika gamla y, vi kommer att behöva läsa raden 72 00:04:03,310 --> 00:04:05,940 att vi vill ha in i vår nuvarande rad buffert. 73 00:04:05,940 --> 00:04:07,700 Så hur ska vi göra det? 74 00:04:07,700 --> 00:04:11,650 Först ska vi ta reda på position som börjar den raden i 75 00:04:11,650 --> 00:04:13,100 originalfilen. 76 00:04:13,100 --> 00:04:18,630 Så den positionen kommer att vara förbi alla våra rubriker och 77 00:04:18,630 --> 00:04:21,589 nu förbi gamla y rader. 78 00:04:21,589 --> 00:04:23,880 >> Och så hur många byte befinner sig i en enda rad? 79 00:04:23,880 --> 00:04:28,740 Återigen, stort som RGB-trippel gånger gammal bredd plus gamla stoppning, så det är 80 00:04:28,740 --> 00:04:30,640 antalet byte i en enda rad. 81 00:04:30,640 --> 00:04:33,680 Och vi vill hoppa förbi gamla y rader. 82 00:04:33,680 --> 00:04:37,580 Så vi kommer att f söka och vi är med hjälp söka set att börja från 83 00:04:37,580 --> 00:04:39,100 början av en fil. 84 00:04:39,100 --> 00:04:42,740 Vi ska f söka denna position i filen, sätter oss på 85 00:04:42,740 --> 00:04:46,500 början av raden vi vill att läsa in vår buffert. 86 00:04:46,500 --> 00:04:48,510 >> Vi kommer att ställa rad numb lika gammal y. 87 00:04:48,510 --> 00:04:53,080 Så nu om vi loop tillbaka och vi vill använda samma rad i vår ut filen, 88 00:04:53,080 --> 00:04:55,970 då vi inte kommer att läsa den igen i onödan. 89 00:04:55,970 --> 00:04:59,310 Så egentligen, är raden numb bara en optimering. 90 00:04:59,310 --> 00:05:05,500 >> Slutligen kommer vi att läsa in den aktuella raden den gamla bredden RGB-tripplar 91 00:05:05,500 --> 00:05:08,040 att vi vill ha från den ursprungliga filen. 92 00:05:08,040 --> 00:05:12,270 Så nu nuvarande rad innehåller pixlarna från originalfilen som vi vill 93 00:05:12,270 --> 00:05:14,200 skriva in i ut filen. 94 00:05:14,200 --> 00:05:18,960 Så nu, precis som ovan, i stället för iteration över den gamla filen, behöver vi 95 00:05:18,960 --> 00:05:22,560 det att iterera över de nya filerna raderna. 96 00:05:22,560 --> 00:05:27,450 Väl här, istället för att iterera över alla av de gamla bildpunkter som i nuvarande raden, 97 00:05:27,450 --> 00:05:31,210 vi vill att iterera över alla av bildpunkter i vår nya filen i detta 98 00:05:31,210 --> 00:05:32,480 särskild rad. 99 00:05:32,480 --> 00:05:34,140 >> Varför vill vi göra det? 100 00:05:34,140 --> 00:05:38,960 Eftersom vi ser här att vi inte är faktiskt nödvändigtvis använda alla de 101 00:05:38,960 --> 00:05:41,020 pixlar i originalfilen. 102 00:05:41,020 --> 00:05:46,630 För om vi krymper, vi kanske egentligen vill hoppa pixlarna. 103 00:05:46,630 --> 00:05:48,090 Och vi ser att det här - 104 00:05:48,090 --> 00:05:49,690 x dividerat med faktor - 105 00:05:49,690 --> 00:05:55,620 nära speglar upp här där vi säger y dividerat med faktor att räkna ut att 106 00:05:55,620 --> 00:06:02,480 den gamla y: te rad motsvarar y-te raden i den nya filen. 107 00:06:02,480 --> 00:06:05,880 >> Nu ska vi skriva alla Dessa bildpunkter från den gamla raden 108 00:06:05,880 --> 00:06:07,440 in i vårt nya rad. 109 00:06:07,440 --> 00:06:10,890 När vi har gjort det, behöver vi bara sätta stoppningen i slutet av vår rad 110 00:06:10,890 --> 00:06:15,540 och vi ska slinga tillbaka och fortsätt alla raderna i vår nya filen. 111 00:06:15,540 --> 00:06:19,390 I slutet måste vi stänga våra gamla fil, stänga vår nya filen och retur 112 00:06:19,390 --> 00:06:21,540 noll eftersom allt gick bra. 113 00:06:21,540 --> 00:06:24,220 >> Mitt namn är Rob och detta var Recess. 114 00:06:24,220 --> 00:06:29,184 >> [MUSIK SPELA]