[Speel van musiek] ROB BOWDEN: Hi, ek is Rob, laat probeer om dit op vir die grootte. So, ons is weer aan die gang te begin met basies 'n afskrif van die copy.c, en Maak 'n paar veranderinge. Let dadelik sien ons 'n verandering, waar in plaas van om te kyk of argc nie gelyk 3, ons wil om te kyk As argc nie gelyk 4, aangesien nou is ons nie net om in 'n infile en outfile, maar ons is ook in die neem van n, wat die bedrag is wat ons is skalering die oorspronklike beeld deur. Sodra ons is seker van dat ons net omskep N 'n heelgetal met behulp atoi. So, nou gaan ons 'n paar te skep aliasse, bel bevat SPASIES 2 infile, en bevat SPASIES 3 outfile, want bevat SPASIES 2 en bevat SPASIES 3 is nie baie nuttig name. Nou wil ons om seker te maak om seker te maak n ' binne die grense wat ons verwag, sodat die spec bepaal dat as dit is minder as of gelyk aan nul, of meer as 100, dan is dit 'n ongeldige resize faktor, en ons moet die gebruiker van daardie waarsku. Sodra ons verby al wat ons kan Uiteindelik ons ​​infile oop te maak, en ons moet aan fout nagaan om seker te maak dat die opening het nie versuim om een ​​of ander rede. Ons moet ook ons ​​outfile oop te maak, en weer fout nagaan om seker te maak dat het nie versuim om een ​​of ander rede. Maar seker wees as die opening van die outfile misluk wat ons nodig het om te sluit die infile, wat reeds geopen. So, in die veronderstelling dat nie slaag nie, dan we're - net soos in copy.c-- gaan lees in die kop uit die infile. Ons gaan om seker te maak dit is 'n geldige bitmap, maar nou is ons gaan 'n paar om te doen dinge 'n bietjie anders. So die eerste, ons gaan om te wil onthou die oorspronklike hoogte en breedte van die infile, want ons gaan word om dit te verander vir die outfile. So nou onthou dat vir vreemde redes bi.biheight, is negatief, en sodat die werklike hoogte, in 'n positiewe, ons wil die absolute waarde te neem. Nou, is die padding gaan dieselfde wees berekening soos dit was in copy.c, gebruik van die ou breedte, en nou is ons gaan eintlik om te verander Wat is in ons kop. So ons gaan ons breedte vermenigvuldig met n, omdat ons die breedte skalering deur n, vermenigvuldig die hoogte deur n, aangesien ons skaal deur n, en nou het ons ' die berekening vir 'n nuwe padding gebaseer op die nuwe breedte. So nou het ons 'n paar te verander ander velde in ons kop. Bi.biSizeImage veronderstel is om te wees die grootte van al die grepe in die pixels en padding van die beeld. En so het die grootte van 'n enkele ry van ons beeld is die grootte van die RGB trippel, die grootte van 'n enkele pixel, keer die nommer van pixels in 'n ry, plus die padding op die einde van die ry. En dan gaan ons wat om te vermeerder deur absolute waarde van ons hoogte te kry die totale aantal grepe in die beeld data. bf.bfSize is net die totale aantal grepe ons beeld data, so bi.biSizeImage, plus die grootte van ons hoofde. So, toe te voeg op die grootte van bitmap lêer kop, en die grootte van bitmap info kop, OK. So dit is al wat ons nodig het om te verander in ons kop. Nou kan ons die bitmap lêer kop skryf ons outfile, en ons bitmap info header ons outfile, en nou ons is gereed om te begin gaan oor die werklike pixels. So wil ons Itereer oor die infile se scan lyne. So wil ons Itereer oor oldheight. Dit is hoekom ons nodig het om te onthou die oorspronklike hoogte, voordat ons dit verander en afgeskaal dit deur n. Nou gaan ons 'n enkele om te lees ry van die infile in 'n buffer grootte oldwidth. So hier is ons freading grootte van RGB trippel, een pixel, en ou breedte van hulle van die infile in ons buffer. En wat gaan 'n hele te wees ry in hierdie reeks. So nou, ons wil Itereer n keer te druk hierdie ry ons outfile n keer. En dit is wat hierdie lus is om te doen. Hierdie innerlike lus is iterating oor die ry self, oor die skikking, drukwerk elke pixel in die skikking n keer. So het die nulde element word gedruk n keer, is die eerste element wat gedrukte n keer. En dit is soort van hoe ons gaan horisontaal skaal in die outfile, en hierdie lus, want ons is herhaling n tye, is hoe ons gaan vertikaal skaal. Hier, sien ons dat ons nodig het om by te voeg die padding aan die einde van elke ry. Dit is waarom dit is binne-in die for-lus dit is die druk van die N rye van net hierdie een ry van die infile. Dan hier, ek gaan oor te slaan oor die padding in die infile, aangesien een keer ons klaar is met een ry van die infile, ons gee nie om oor wat die padding was. Ons wil net te kry om die tweede ry. En dan sal ons lus terug en doen alles dit weer vir die tweede ry. Ten slotte, wanneer ons klaar is met al hierdie dinge, ons kan die infile sluit, naby die outfile, en terugkeer 0, want ons is gedoen. My naam is Rob, en dit was resize. [Speel van musiek]