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