[MUSIK SPELA] ROB BOWDEN: Hej. Jag är Rob och låt oss storlek upp detta problem. Så vi kommer att börja med copy.c som en mall, men vi kommer att vara göra en hel del förändringar. Nu ser vi att vi omedelbart göra en ändra där vi inte längre kontroll för vårt RXC inte är lika 3, men nu Vi kollar rc inte lika 4. Eftersom vi vill också att i Utöver de i fil och ut filer argument, f, som kommer att vara här faktor med vilken vi skalning. Så när vi är säkra på det, vill vi Använd s scan f för att konvertera strängen argv1 till ett flöte. Och vi kommer att lagra att i faktor. Denna extra karaktär är att se att vi inte faktiskt anger något i stil med 1,4 ABC på kommandoraden. Nu ska vi skapa några alias eftersom RV2 och RV3 inte mycket hjälp namn. Vi är, i stället, kommer att kalla dem i filen och ut filen. Nu ska vi se till att vår faktor var faktiskt giltigt. Så om faktorn är mindre än eller lika med noll eller större än 100, då som per spec bör vi förkasta denna faktor. När vi är säkra på att det är bra, nu kan vi Öppna n filen, och vi måste göra Se till att den framgångsrikt öppnades. Om det inte kommer att returnera null. Vi kommer att öppna ut filen. Och återigen, vi vill kontrollera att säker på att det öppnat. Och om det inte lyckas öppna, då Vi måste också se till att stänga n filen som ursprungligen framgångsrikt öppnat, annars har vi en minnesläcka. Så nu ska vi läsa i bitmap filhuvudet och bitmap info header från n-filen. Vi ska se till att n-filen var en giltig bitmapp. OK. Så nu ska vi börja att göra några ändringar. Så för att vi ska kunna ändra saker, först vill vi minnas gamla bredden på n-fil. Vi vill komma ihåg den gamla stoppningen av n fil med samma beräkning från copy.c. Och nu ska vi ändra bitmappen info huvudet. Och så vi multiplicera både bredden och höjden av faktor eftersom det är vad vi skalning av. Vi kommer att bestämma det ny stoppning av filen genom att med användning av den nya bredden. Och vi kommer att bestämma den nya storleken på bilden med hjälp av antalet byte i en enda rad, som kommer att vara lika med antalet bildelement i denna rad gånger större än en pixel plus antalet byte av stoppning i slutet i den raden, och multiplicera allt med antalet rader som vi har. Så det är antalet byte Vi har i våra bilddata. Bf.Bfsize nu kommer att vara nummer byte i vår bild beta plus storleken på våra huvuden. Så plus storlek på bitmap-fil header och storleken hos bitmappen info huvudet. OK. Så det är det för våra huvuden. Vi kan skriva filen huvudet och info header till vår ut fil, och vi är bra. Nu är det dags att börja faktiskt skriva pixeln data till ut filen. Vi kommer att förklara en buffert av storlek gamla bredd RGB tripplar, och vi är kommer att deklarera en variabel som heter rad stel, vilket är att vi kommer att ursprungligen lika med -1. Vi ser att vi kommer att använda att för att hålla reda på vad rad som vi för närvarande har laddat i denna buffert. OK. Så nu till skillnad från standardversionen, istället för iteration över på i fil, kommer vi att iterera över varje rad i den ut filen och räkna ut vilken rad i i filen vi vill placera i denna rad i ut filen. Så iterera över alla rader i ut filen med den nya höjden, är vi först kommer att bestämma den rad i den gamla fil vi kommer att använda, vilket vi är ska göra genom att ta denna ström rad delat med faktorn. Så det kommer att ge oss den rad i den gamla filen som vi vill ha. Så nu om rad stel inte är lika gamla y, vi kommer att behöva läsa raden att vi vill ha in i vår nuvarande rad buffert. Så hur ska vi göra det? Först ska vi ta reda på position som börjar den raden i originalfilen. Så den positionen kommer att vara förbi alla våra rubriker och nu förbi gamla y rader. Och så hur många byte befinner sig i en enda rad? Återigen, stort som RGB-trippel gånger gammal bredd plus gamla stoppning, så det är antalet byte i en enda rad. Och vi vill hoppa förbi gamla y rader. Så vi kommer att f söka och vi är med hjälp söka set att börja från början av en fil. Vi ska f söka denna position i filen, sätter oss på början av raden vi vill att läsa in vår buffert. Vi kommer att ställa rad numb lika gammal y. Så nu om vi loop tillbaka och vi vill använda samma rad i vår ut filen, då vi inte kommer att läsa den igen i onödan. Så egentligen, är raden numb bara en optimering. Slutligen kommer vi att läsa in den aktuella raden den gamla bredden RGB-tripplar att vi vill ha från den ursprungliga filen. Så nu nuvarande rad innehåller pixlarna från originalfilen som vi vill skriva in i ut filen. Så nu, precis som ovan, i stället för iteration över den gamla filen, behöver vi det att iterera över de nya filerna raderna. Väl här, istället för att iterera över alla av de gamla bildpunkter som i nuvarande raden, vi vill att iterera över alla av bildpunkter i vår nya filen i detta särskild rad. Varför vill vi göra det? Eftersom vi ser här att vi inte är faktiskt nödvändigtvis använda alla de pixlar i originalfilen. För om vi krymper, vi kanske egentligen vill hoppa pixlarna. Och vi ser att det här - x dividerat med faktor - nära speglar upp här där vi säger y dividerat med faktor att räkna ut att den gamla y: te rad motsvarar y-te raden i den nya filen. Nu ska vi skriva alla Dessa bildpunkter från den gamla raden in i vårt nya rad. När vi har gjort det, behöver vi bara sätta stoppningen i slutet av vår rad och vi ska slinga tillbaka och fortsätt alla raderna i vår nya filen. I slutet måste vi stänga våra gamla fil, stänga vår nya filen och retur noll eftersom allt gick bra. Mitt namn är Rob och detta var Recess. [MUSIK SPELA]