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