>> [Muziek]
>> ROB BOWDEN: Hi.
Ik ben Rob en laten we de grootte van dit probleem.
Dus we gaan beginnen met copy.c als een sjabloon, maar we gaan wel
maakt nogal wat veranderingen.
>> Nu zien we dat we meteen het maken van een veranderen waar we niet meer controleren
voor onze rxc niet gelijk 3, maar nu we controleren rc niet gelijk 4.
Omdat we willen ook omvatten, in Naast de in het dossier en uit bestanden
argumenten, f die gaat dit worden factor waarmee we schaalvergroting.
>> Dus zodra we zijn er zeker van dat, we willen Gebruik s scan f om de string te zetten
argv1 een vlotter.
En we gaan slaan dat factor.
Deze extra karakter is ervoor te zorgen dat we eigenlijk niet betreden
iets als 1.4 ABC op de opdrachtregel.
>> Nu gaan we een aantal aliassen sinds RV2 en RV3 niet
zeer behulpzaam namen.
We zijn, in plaats daarvan, gaan noemen hen in het dossier en uit bestand.
Nu gaan we ervoor zorgen dat onze factor was eigenlijk geldig.
Als factor kleiner is dan of gelijk aan nul of groter dan 100, dan volgens
de spec, moeten we afwijzen deze factor.
>> Als we weten zeker dat het goed is, nu kunnen we open het n-bestand, en we moeten maken
zeker van dat het met succes werd geopend.
Als het niet, zal dat null terugkeren.
We gaan om de file te openen.
En nogmaals, we willen controleren om er ervoor dat het succesvol geopend.
En als het niet met goed gevolg heeft geopend, dan we moeten ook zeker om te sluiten
de n bestand dat oorspronkelijk succes geopend, of anders hebben we een
geheugenlek.
>> Dus nu gaan we lezen in de bitmap header en bitmap info
header van de n-bestand.
We gaan ervoor zorgen dat de n bestand was een geldig bitmap.
OK.
>> Dus nu gaan we om te beginnen een aantal wijzigingen.
Dus omdat we gaan veranderen dingen, we willen eerst denken aan de
oude breedte van de n-bestand.
We willen de oude vulling van herinneren de n-bestand met behulp van dezelfde berekening
van copy.c.
>> En nu gaan we veranderen de bitmap info header.
En dus gaan we zowel de breedte te vermenigvuldigen en de hoogte van factor sinds
dat is wat we schaalvergroting door.
We gaan bepalen nieuwe vulling van het dossier door
met de nieuwe breedte.
En we gaan naar de nieuwe te bepalen grootte van het beeld met behulp van het aantal
bytes in een enkele rij die gaat is het aantal pixels in die rij
keer de grootte van een pixel plus aantal bytes padding eind
van die rij, en vermenigvuldigen dat alles door het aantal rijen die we hebben.
Dus dat is het aantal bytes we hebben in onze beeldgegevens.
>> Bf.Bfsize nu gaat om het nummer te van bytes naar ons beeld beta plus
de grootte van onze headers.
Dus plus size van bitmap-bestand header en de grootte van de bitmap info header.
OK.
Dus dat is het voor onze headers.
We kunnen het bestand hoofd schrijven en info header aan onze uit
bestand, en we zijn goed.
>> Nu is het tijd om daadwerkelijk te starten schrijven van de pixel
gegevens naar de file.
We gaan een buffer van omvang verklaren oude breedte RGB triples, en we zijn
gaat om een ​​variabele genaamd verklaren rij gevoelloos, wat we gaan
aanvankelijk gelijk aan negatief 1.
We zullen zien dat we gaan gebruiken dat, om bij te houden van wat
rij die we momenteel hebben geladen in deze buffer.
OK.
>> Dus nu in tegenstelling tot de standaard editie, in plaats van itereren over op de in
bestand, gaan we itereren over elk rij in de file en erachter te komen
welke rij in de in het dossier willen we plaats in deze rij in de file.
Dus itereren over alle rijen in de bestand met behulp van de nieuwe hoogte, we zijn eerst
naar de rij bepalen de oude file we gaan gebruiken, die we
gaan doen door het nemen van deze stroom rij gedeeld door factor.
Dus dat gaat ons de rij te geven in het oude bestand dat we willen.
>> Dus nu als rij gevoelloos niet gelijk oud y, we gaan te hebben om de rij te lezen
dat we willen in ons huidig ​​rij buffer.
Dus hoe gaan we dat doen?
Ten eerste gaan we te achterhalen van de standpunt dat rij begint in de
originele bestand.
Zodat die positie gaat worden verleden al onze headers en
nu langs oude y rijen.
>> En ja hoeveel bytes zijn in een enkele rij?
Nogmaals, de grootte van RGB triple keer oud breedte plus oud padding, dus dat is het
aantal bytes in een enkele rij.
En we willen langs oude y rijen overslaan.
Dus we gaan om f te zoeken en we zijn door seek set uit te gaan van de
het begin van een bestand.
We gaan f trachten deze positie in het bestand, wat ons bij de
het begin van de rij die we willen te lezen in onze buffer.
>> We gaan reeks rij gevoelloos gelijk aan oude y.
Dus nu als we lus terug en we willen Gebruik deze zelfde rij in onze uit-bestand,
dan zijn we niet van plan om te lezen deze opnieuw onnodig.
Dus echt, rij gevoelloos is alleen een optimalisatie.
>> Tot slot gaan we lezen in de huidige rij de oude breedte RGB verdrievoudigt
dat we willen van het originele bestand.
Dus nu huidig ​​rij bevat de pixels van het oorspronkelijke bestand dat we willen
schrijven naar de file.
Dus nu, net als boven, in plaats van itereren over het oude bestand, moeten we
het aan itereren over de nieuwe bestanden rijen.
Nou hier, in plaats van itereren over alle van de oude pixels die in huidig ​​rij,
willen we itereren over alle pixels in het nieuwe bestand in deze
bepaalde rij.
>> Waarom willen we dat doen?
Want we zien hier dat we niet eigenlijk noodzakelijk met alle
pixels in het originele bestand.
Want als we krimpen, zouden we eigenlijk willen de pixels overslaan.
En we zien dat dit -
x gedeeld door factor -
nauw spiegels hier waar we zeggen y gedeeld door factor om erachter te komen dat
de oude y-de rij correspondeert met de y-de rij in dit nieuwe bestand.
>> Nu gaan we allemaal schrijven deze pixels van de oude rij
in onze nieuwe rij.
Zodra we dat gedaan hebt, moeten we gewoon zet de padding aan het einde van onze rij
en we zullen loop terug en blijven voor alle rijen in onze nieuwe bestand.
Op het einde moeten we sluiten onze oude bestand, sluit onze nieuw bestand, en de terugkeer
nul want alles ging prima.
>> Mijn naam is Rob en dit was Recess.
>> [Muziek]