>> [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]