[MUSIC Playing] ZAMYLA Chan: Lépjünk dolgokat az átméretezés. Az átméretezés, a felhasználó fog múlni keresztül a parancssorból, a bitmap kép azt akarják, hogy a skála egy sor hogy ők is át-ben, a parancssorban. Hogy mi ez? Nos, kezdjük az elején, nézzük osztása lépésre. Fogsz szeretnénk megnyitni a bemeneti fájl hogy azok is, valamint a létre, és nyissa ki a kimeneti fájl, amely fogsz tenni a átméretezett képet be Aztán, mert te átméretezés, és mert ez egy bitmap, akkor a fejléc, így fogsz is frissítheti a fejléc információ a kimeneti fájl, és azt írja, hogy be Akkor fogsz olvasni a A scanline a bemeneti fájl, pixel-by-pixel, átméretezés vízszintesen és az írás azok a pixelek a outfile, meghatározott A felhasználó skálán. Fogsz emlékezni, hogy padding hozzá, ha szükséges. Bővebben később. És akkor is, átméretezés függőlegesen. OK. Tehát ez lesz egy kicsit bonyolultabb, mint a ki tette, de mi hasonló, hogy copy.c lesz, ismét igen hasznosnak bizonyulhat. Ne feledje, hogy copy.c megnyit egy fájlt, frissíti a fejléc információkat az outfile, akkor olvassa a scanline, pixel-by-pixel, amikor minden pixel a kimeneti fájl soronkénti. Tehát még egyszer, az első lépés lehet, hogy talán , hogy cp, copy.c, resize.c be a PSET5 könyvtárba. Ne feledje azonban, mielőtt másolni, , hogy megbizonyosodjon arról, hogy érti copy.c nagyon alaposan. OK. Szóval nyisson meg egy fájlt. Tudod, hogyan kell csinálni. Fogom hagyni, hogy az Ön számára. Ezután frissítse a fejléc információ A kimeneti fájl. Mert van egy új bitmap, már az új fejléc info. Mi változik itt? Nos, a fájl mérete meg fog változni mert megyünk, hogy több pixel, mint korábban. A kép mérete, így is fog változni, mint a szélessége és magassága. Tehát melyik változók azok pontosan? Nos, ha megnézi a fejléc információkat, látod van biSizeImage, ami a teljes kép méretét bájtban beleértve a pixel és padding. biWidth a szélessége a kép pixelben, mínusz a kitöltés. biHeight a magassága A kép pixel. És így ezek tartalmazzák a Struktúrák BITMAPFILEHEADER és BITMAPINFOHEADER. Meg tudod mondani, melyik melyik a fog bmp.h, és nézte a BITMAPINFOHEADER struct és látás változók a listába. Tehát, hogy frissítse a outfiles fejléc információt, akkor szeretne majd változtatni ezeket az értékeket a magasságát és szélességét. De esélye van, akkor lehet, hogy kell egy kis A bemeneti fájl fejlécének információ később, így a legjobb, hogy nyomon követhesse a két. De nagyon világos, a változó neveket úgy, hogy nem véletlenül írja a helytelen értékek A fejléc a kimeneti fájl. Most térjünk olvasás A soronkénti pixel-by-pixel. Ismét fogunk fordulni a megbízható fájl I / O könyvtár, és nézd meg A fread funkciót. fread vesz egy mutatót a struktúra , amely tartalmazni fogja a byte-ok olvasod be, a mérete minden eleme, hogy olvasod - Ismét, sizeof lesz hasznos működnek itt, a szám a elemei, méretbeli, hogy te olvasás, majd végül a inpointer, a fájl olvasod a. Így szedi számot elemet A méret inpointer, és helyezzük el őket adatokat. Most itt az ideje, hogy átméretezni vízszintesen. ha n értéke 2, akkor minden egyes képpont A bemeneti fájl fogunk írni, hogy kétszer a kimeneti fájl. Hogyan írunk fájlokat? Nos, mi van a fwrite funkciót, így Már a mutatót a struktúra tartalmazó byte, hogy te írásban, aztán át a mérete, száma, és a kimenet, ahol akkor lesz írásban. Majd ismételje meg a folyamatot, majd képes egy egyszerű iteratív hurok. De meg kell emlékezni hogy adjunk padding be A koncepció a padding az, hogy jól, minden egyes pixel három harap, de a mérete minden scanline kell lehet több 4 bájt. Tehát, ha a pixelek száma nem 4 többszöröse, meg kell, hogy adjunk néhány padding, ami csak nullák. Most, ellentétben ki tette, és ellentétben a példányt, majd infile kép és a outfile fájl már más van különböző padding mert ők különböző szélességű. OK. Így talán a képlet jöhet itt. Majd hagyjuk, hogy megtalálja ki, de mondani, hogy, hogy írjon padding, Nos, ez csak egy egyszerű fputc funkció halad a karakter kívánt írni, majd a fájl mutatót, amit szeretnék írni. Most, hogy már átméretezett vízszintesen, és akkor használják padding, ne feledjük, hogy meg kell mozgatni a fájlt helyzetjelző, mert nem fread a padding. Tehát azt szeretnénk, hogy győződjön meg arról, hogy a fájl helyzetjelző, a bemeneti fájl áll a megfelelő ponton. Mivel mi is szeretnénk átméretezés függőlegesen. Nem csak nyúlik vízszintesen, mert minden sorban igények másolni n-szer. Most, több különböző módja erre. Tehát az egyik, fel tudjuk használni a újraírása módszert, hogy emlékezzen az összes képpont egy adott sorban egy tömb, és akkor azt írjuk, hogy a tömb , ahányszor csak szükséges. Vagy ott van a recopy módszer, ahol, elolvasása után egy sorban a infile , majd írja le, hogy a kimeneti fájl, hozzátéve, a szivacs, mi fseek elejére vezet vissza az eredeti sor, majd ismételje meg a vízszintes átméretezés onnan. Függetlenül attól, hogy a módszer, mégis, akkor Szeretnénk minden pixel kell ismételni n-szer, és minden sorban, hogy n-szer megismétlődik is. Ezzel, akkor van bitmap nagyobb, mint az élet. A nevem Zamyla, és ez CS50.