[Musiikki soi] ZAMYLA Chan: Let n isku asioita, joissa resize. Vuonna kokoa, käyttäjä kulkea kautta komentoriviltä, ​​bittikarttakuvana että he haluavat sinun mittakaavassa numero että ne myös kulkea, komentoriville. Miten teemme tämän? No, asiat ensin, katsotaanpa jakaa järjestelmä vaiheita. Olet menossa halua avata infile että he antavat sinulle, sekä luoda ja avata outfile että aiot laittaa kokoa kuvan sisään Sitten, koska olet kokoa, ja koska se on bittikartta, se otsikon, niin aiot päivittää myös otsikon tietoa outfile, ja kirjoittaa, että sisään Sitten aiot lukea osaksi juova ja infile, pixel-by-pixel, koon vaakasuunnassa ja kirjoittamisen kuvapisteryhmistä outfile määritellyllä jonka käyttäjän asteikon. Olet menossa muistaa Lisää täyte tarpeen. Siitä lisää myöhemmin. Ja sitten, myös kokoa pystysuunnassa. OK. Joten tämä tulee olemaan hieman enemmän monimutkaisempi kuin kuka tehnyt sen, mutta mitä vastaavia on, että copy.c tulee, jälleen osoittautua erittäin hyödyllistä. Muista, että copy.c avaa tiedoston, päivittää otsikon tiedot outfile, sitten lukee osaksi juova, pixel-by-pixel, kirjallisesti joka pikseli tulosteeseen tiedoston juova. Joten jälleen, ensimmäinen askel voisi varmaan olla cp, copy.c, resize.c omaan PSET5 hakemistoon. Muista kuitenkin, ennen kuin kopioit sen, varmista, että ymmärrät copy.c hyvin perusteellisesti. OK. Joten avaa tiedoston. Tiedät miten se tehdään. Aion jättää sen sinulle. Seuraavaksi päivitetään otsikkotiedot varten outfile. Koska meillä on uusi bittikartta, meillä on uusi otsikko info. Mikä muuttuu täällä? No, tiedostokoko tulee muuttumaan koska aiomme olla enemmän pikseleitä kuin ennen. Kuvakoko on siis myös tulee muuttumaan, sillä on leveys ja korkeus. Joten mikä muuttujat ovat ne, tarkalleen? No, jos tarkastellaan otsikkoon tietoja, näet siellä on biSizeImage, joka edustaa yhteensä kuvan koko tavuina lukien pikseliä ja pehmusteet. biWidth on kuvan leveyden pikseleinä miinus täyte. biHeight on korkeus kuvan pikseleinä. Ja niin nämä sisältyvät structs BITMAPFILEHEADER ja BITMAPINFOHEADER. Voit kertoa kumpi on kumpi by menossa bmp.h ja katsot BITMAPINFOHEADER struct ja näkeminen mitkä muuttujat on lueteltu siinä. Joten päivittää outfiles header tietoa, olet menossa haluavat muuttaa näitä arvoja korkeus ja leveys. Mutta mahdollisuudet ovat, voit tarvita ja infile n otsikkotietoja myöhemmin, joten paras seurata molempia. Mutta olla hyvin selkeä muuttuja nimiä niin, että et ole vahingossa kirjoittaa virheellisiä arvoja otsikon outfile. Joten nyt käykäämme luettavaksi juova pikseli pikseli. Jälleen aiomme kääntyä meidän luotettava tiedoston I / O-kirjasto ja katso fread toiminto. fread vie osoitin struct joka sisältää tavujen luet vuonna, koko kunkin elementti, joka luet - jälleen, sizeof tulee olemaan hyödyllinen tässä tapauksessa toimi määrä osia koon, kokoa, että olet käsittelyssä, ja sitten lopulta, inpointer, tiedosto, luet alkaen. Joten olet ottaen useita elementtejä koosta alkaen inpointer, ja laskemisesta tietoja. Nyt on aika muuttaa vaakasuunnassa. jos n on 2, niin kunkin pikselin infile, aiomme kirjoittaa sitä kahdesti outfile. Miten voimme kirjoittaa tiedostoja? No, meillä on fwrite toiminto, joten olemme ottaneet osoitin struct joka sisältää tavut, että olet kirjallisesti, ja sitten me kulkea koko, lukumäärä, ja lähtö, jossa aiot olla kirjallisesti että. Ja sitten toistaa prosessi, on pystyy yksinkertainen iteratiivinen silmukan. Mutta meidän täytyy muistaa Lisää täyte sisään Käsite pehmuste on, että hyvin, jokainen pikseli on kolme puremat, mutta koko kunkin juova must olla 4 tavun kerrannainen. Joten jos pikselien määrä ei ole jaollinen 4, meidän täytyy lisätä joitakin pehmuste, joka on vain nollia. Nyt, toisin kuin Who Done It, ja toisin kuin kopio, sitten infile kuva ja outfile tiedosto on erilainen on eri padding koska he eri leveyksiä. OK. Joten ehkä kaava olisi ovat käteviä täällä. Jätän sen sinulle löytää sitä, mutta kertoa teille, kirjoittaa täyte, No, se on vain yksinkertainen fputc toiminto, ohimennen merkki että haluat kirjoittaa, ja sitten tiedoston osoitin, että olet haluat kirjoittaa. Joten nyt olemme kokoa vaakasuunnassa, ja sitten käytetään täyte, Muista, että sinun tarvitsee siirtää tiedoston asennonosoittimen, koska olet voi fread osaksi täyte. Joten haluat varmistaa, että tiedosto Asennonosoitin infile on oikeassa kohdassa. Koska haluamme myös kokoa pystysuunnassa. Emme voi vain venyttää se vaakasuoraan, koska jokainen rivi tarpeisiin kopioitava n kertaa. Nyt on olemassa useita erilaisia tapoja tehdä tätä. Joten, voimme käyttää uudelleenkirjoitus menetelmää, vuonna että muistamme kaikki pikseliä Tietyn rivin array, ja sitten kirjoittaa, että levyjärjestelmän monta kertaa kuin tarvitaan. Tai siellä recopy menetelmä, jossa, lukemisen jälkeen yksi rivi infile ja sitten kirjallisesti, että osaksi outfile, lisäämällä täyte, me fseek takaisin alkuun alkuperäisen rivin, ja toista sitten vaaka koon sieltä. Menetelmästä riippumatta, vaikka, sinun Haluan jokaisen pikselin toistua n kertaa, ja jokainen rivi on toistetaan n kertaa yhtä hyvin. Kanssa, että sinulla on bittikartta elämää suurempia. Nimeni on Zamyla, ja tämä on CS50.