[Muusika mängib] ZAMYLA chan Laseme asjad korda resize. In resize, kasutaja läbima kaudu käsurealt Rasterpildi et nad tahavad sind skaala järgi number et nad ka läbima, käsureal. Kuidas me seda teeme? Noh, esimesed asjad kõigepealt, lähme jaotada see samme. Sa lähed tahan avada infile et nad teile, samuti luua ja avada outfile et sa lähed panna suurusega pildi sisse Siis, sest sa oled saneerimist ja sest see on bitmap, see header, nii sa lähed ka update kaudu teave outfile, ja kirjutame sisse Siis sa lähed välja lugeda scanline of infile, pixel-by-pixel, saneerimist horisontaalselt ja kirjalikult nende pikslite outfile täpsustatud kasutaja skaala. Sa lähed mäleta lisada padding kui vaja. Veel selle hiljem. Ja siis ka suurust vertikaalselt. OK. Nii et see saab olema natuke rohkem keerulisem kui Kes teinud, kuid mis on sarnane see, et copy.c tahte jällegi osutuda väga kasulikuks. Pea meeles, et copy.c avab faili, värskendab header teave outfile, siis loeb sisse scanline, pixel-by-pixel, kirjutades iga piksli arvesse väljund faili scanline. Nii et taas, teie esimene samm võiks ilmselt olema cp, copy.c, resize.c oma PSET5 kataloog. Pidage meeles, enne kui sa kuuled seda, veenduge, et saate aru, copy.c väga põhjalikult. OK. Teeme avada faili. Sa tead, kuidas seda teha. Ma jätan selle sulle. Seejärel ajakohastab päiseinformatsiooni jaoks outfile. Kuna meil on uus bitmap, meil uus header info. Mis muutuvas siin? Noh, faili suurus on muutu sest me ei kavatse olla rohkem piksleid kui enne. Pildi suurus on seega ka muutu, kui see on laius ja kõrgus. Nii et mis muutujad on sellised, täpselt? Noh, kui sa vaatad kaudu teave, näed seal on biSizeImage, mis moodustab kokku pildi suurus baitides sealhulgas pikslit ja polster. biWidth on laiusega pilt pikslites miinus polster. biHeight on kõrgus pilt pikslit. Ja nii need sisalduvad structs BITMAPFILEHEADER ja BITMAPINFOHEADER. Te võite öelda, milline neist on mis, mida läheb bmp.h ja vaadates BITMAPINFOHEADER struct ja nägemine Millised muutujad on seal loetletud. Nii uuendada outfiles kaudu teave, sa lähed, et tahad muuta need väärtused kõrgus ja laius. Aga võimalused on, te võite vajada Euroopa infile päises info hiljem, et kõige paremini jälgida nii. Aga väga selgelt oma muutuja nimed, nii et sa ei kogemata kirjutada vale väärtused päises outfile. Nüüd lähme lugemisel vastu võetud scanline pixel-by-pixel. Jällegi, me pöördume meie ustav faili I / O teek ja vaata fread funktsioon. fread võtab kursor struct mis sisaldab bytes et sa loed, suurus iga element, et sa loed - uuesti, sizeof saab olema kasulik funktsioneerida siin mitmeid elementide suurus, suurus, et sa oled lugemine ja seejärel lõpuks inpointer, fail sa loed alates. Nii et sa võtad number elemendid suurus alates inpointer ja laskmiseks andmed. Nüüd on aeg suurust horisontaalselt. kui n on 2, siis iga piksel infile, me ei kavatse kirjutada kaks korda outfile. Kuidas kirjutada faile? Noh, meil on fwrite funktsioon, nii et oleme võtnud kursor struct mis sisaldab bytes, et sa oled kirjutamise ja siis liigu suurus, arv ja võimsus, kus sa lähed olema kirjalikult. Ja siis korrata protsessi saab võimalik lihtsa iteratiivne silmus. Aga me peame meeles pidama, lisada padding sisse Mõiste polster on selles, et, noh, Iga piksel on kolm hammustab, kuid suurus iga scanline must olema mitu 4 baiti. Nii et kui pikslite arv ei ole mitmekordselt 4, meil on vaja lisada mõned polster, mis on vaid nullid. Nüüd erinevalt Kes teinud, ning erinevalt koopia, siis infile pilt ja outfile fail on erinev olema erinev polster, sest nad on erineva laiusega. OK. Nii et ehk jaotusvalemist tulla käepärane siin. Ma jätan selle teile seda välja selgitada, kuid öelda, et kirjutada polster noh, see on lihtsalt fputc funktsiooni kulgeb iseloomu et sa tahad kirjutada, ja siis file pointer, et sa soovite kirjutada. Nüüd, et me oleme suurust horisontaalselt, ja siis kasutada polster pidage meeles, et kui teil on vaja faili asendinäidu, sest sa ei fread arvesse polster. Nii et sa tahad veenduda, et teie fail koht märgi infile on õige koht. Sest me tahame suurust vertikaalselt. Me ei saa lihtsalt venitada horisontaalselt, sest iga rida vajadusi tohi kopeerida n korda. Nüüd on mitmeid erinevaid kuidas seda teha. Nii et üks, saame kasutada ümberkirjutamine meetodi kohta et me mäletame kõik pikslid antud rida massiivi ja siis me kirjutame, et massiivi mitu korda kui vaja. Või seal recopy meetod, kus pärast lugemist ühel real infile ja seejärel kirjalikult, et võtta outfile, Lisades polster me fseek Tagasi algust esialgse rea ja korrake horisontaalne saneerimist sealt. Sõltumata meetodist, kuigi, saate tahan, et iga piksel korrata n korda ja igal real olla korrata n korda samuti. Koos, et teil on bitmap suurem kui elu. Minu nimi on Zamyla ja see on CS50.