>> [Musikgengivelse]
>> ROB BOWDEN: Hej.
Jeg er Rob og lad os størrelse op i dette problem.
Så vi vil til at starte med copy.c som en skabelon, men vi kommer til at være
gør en hel del ændringer.
>> Nu ser vi, vi straks gøre en ændre, hvor vi ikke længere tjekker
for vores RXC ikke lig 3, men nu Vi tjekker rc ikke er lig 4..
Da vi ønsker også at omfatte Foruden de i filen og filer ud
argumenter, f som kommer til at være på denne faktor, som vi skalering.
>> Så når vi er sikre på, at vi ønsker at bruge s scanning f konvertere strengen
argv1 til en float.
Og vi kommer til at gemme at faktor.
Denne ekstra karakter er at sikre at vi rent faktisk ikke ind
noget lignende 1,4 ABC på kommandolinjen.
>> Nu skal vi til at skabe nogle aliaser da RV2 og RV3 ikke
meget nyttige navne.
Vi er i stedet kommer til at ringe dem i filen og ud fil.
Nu skal vi sørge for, at vores faktor var faktisk gyldig.
Så hvis faktor er mindre end eller lig med nul eller større end 100, så som pr
spec, bør vi afvise denne faktor.
>> Når vi er sikker på, det er godt, vi nu kan åbne n fil, og vi er nødt til at gøre
sikker på, at det med succes blev åbnet.
Hvis det ikke gjorde det, vil det returnere null.
Vi kommer til at åbne ud-filen.
Og igen, vi ønsker at tjekke for at sikker på det er med succes åbnet.
Og hvis det ikke lykkedes at åbne, så vi også nødt til at være sikker på at lukke
n fil, der oprindeligt blev succesfuldt åbnet, ellers har vi en
hukommelsesfejl.
>> Så nu vil vi læse i bitmap filens header og bitmap info
header fra n fil.
Vi kommer til at sørge for, at n fil var et gyldigt bitmap.
OK.
>> Så nu vil vi til at starte at lave nogle ændringer.
Så fordi vi kommer til at være under forandring ting, vi først ønsker at huske
gamle bredde n fil.
Vi ønsker at huske det gamle polstring af n-filen ved hjælp af den samme beregning
fra copy.c.
>> Og nu vi kommer til at ændre bitmap info header.
Og så vi multiplicere både bredden og højden af ​​faktor, da
det er, hvad vi er skalering af.
Vi kommer til at bestemme ny polstring af filen ved
ved hjælp af den nye bredde.
Og vi kommer til at bestemme den nye størrelsen på billedet ved hjælp af antallet af
bytes i en enkelt række, som vil være antallet af pixels i den række
gange størrelsen af ​​en pixel plus antal byte polstring ved udgangen
af denne række, og multiplicere alle, med antallet af rækker, vi har.
Så det er det antal bytes vi har i vores billeddata.
>> Bf.Bfsize nu kommer til at være nummer bytes i vores image beta plus
størrelsen af ​​vores overskrifter.
Så plus størrelse på bitmap-fil header og størrelse af bitmap-info header.
OK.
Så det er det for vores overskrifter.
Vi kan skrive filen hoved og info header til vores ud
fil, og vi er gode.
>> Nu er det tid til at starte faktisk skrive pixel
data til ud-filen.
Vi kommer til at erklære en buffer størrelse gamle bredde RGB tredobler, og vi er
kommer til at erklære en variabel kaldet række følelsesløse, som er, at vi kommer til at
indledningsvis sættes lig negativ 1.
Vi vil se, at vi kommer til at bruge at for at holde styr på, hvad
række vi i øjeblikket har indlæst i denne buffer.
OK.
>> Så nu i modsætning til den standard udgave, i stedet for iteration over på i
fil, vi kommer til at gentage over hver række i ud-filen og finde ud
hvilken række i in fil, vi ønsker at placere i denne række i ud-filen.
Så iteration i alle rækker i ud fil ved hjælp af den nye højde, er vi først
kommer til at bestemme rækken i den gamle fil vi kommer til at bruge, som vi er
kommer til at gøre ved at tage denne aktuelle række divideret med faktor.
Så det kommer til at give os rækken i den gamle fil, vi ønsker.
>> Så nu, hvis rækken følelsesløs ikke lige gamle y, vi er nødt til at læse rækken
at vi ønsker i vores nuværende rækken buffer.
Så hvordan skal vi gøre det?
Først, vi kommer til at finde ud af position, der begynder at række i
originale fil.
Så denne stilling bliver forbi alle vores overskrifter og
nu forbi gamle y rækker.
>> Og så hvor mange bytes er i en enkelt række?
Igen, størrelsen af ​​RGB tredobbelt gange gammel bredde plus gamle polstring, så det er
antal bytes i en enkelt række.
Og vi ønsker at springe forbi gamle y rækker.
Så vi kommer til at f søge, og vi er bruge søge indstillet til at starte fra
begyndelsen af ​​en fil.
Vi kommer til at f søge at denne position i filen, sætte os på
starten af ​​rækken, vi ønsker at læse i vores buffer.
>> Vi kommer til at sætte række følelsesløs svarende til gamle y.
Så nu, hvis vi loop tilbage, og vi ønsker at bruge den samme række i vores ud-fil,
så vi kommer ikke til at læse det i igen unødigt.
Så virkelig, række følelsesløs er blot en optimering.
>> Endelig vil vi læse i aktuelle række gamle bredde RGB tredobler
at vi ønsker fra den oprindelige fil.
Så nu cur række indeholder pixels fra den originale fil, vi ønsker at
skrive ind i ud-fil.
Så nu, ligesom ovenfor, i stedet for iteration over den gamle fil, vi har brug for
det til at gentage over de nye filer rækker.
Nå her, i stedet for iteration over alle af de gamle pixels, der i nuværende række,
vi ønsker at gentage over alle pixels i vores nye fil i denne
bestemt række.
>> Hvorfor ønsker vi at gøre det?
Fordi vi ser her, at vi ikke faktisk nødvendigvis at bruge alle de
pixels i den oprindelige fil.
Fordi hvis vi skrumper, vi måske faktisk ønsker at springe pixels.
Og vi ser, at det -
x divideret med faktor -
nøje afspejler op her, hvor vi siger y divideret med faktor at regne ud, at
den gamle y-te række svarer til y-te række i den nye fil.
>> Nu skal vi til at skrive alle disse pixels fra den gamle række
ind i vores nye række.
Når vi har gjort det, er vi nødt til bare sætte polstring i slutningen af ​​vores rækken
og vi vil løkke tilbage og fortsætte alle rækkerne i vores nye fil.
I slutningen, er vi nødt til at lukke vores gamle fil, skal du lukke vores nye fil, og tilbagevenden
nul, fordi alt gik fint.
>> Mit navn er Rob og dette var Recess.
>> [Musikgengivelse]