1 00:00:00,000 --> 00:00:10,210 >> [MUSIC Playing] 2 00:00:10,210 --> 00:00:13,320 >> ZAMYLA Chan: Lépjünk dolgokat az átméretezés. 3 00:00:13,320 --> 00:00:17,710 Az átméretezés, a felhasználó fog múlni keresztül a parancssorból, a bitmap kép 4 00:00:17,710 --> 00:00:21,860 azt akarják, hogy a skála egy sor hogy ők is át-ben, 5 00:00:21,860 --> 00:00:23,770 a parancssorban. 6 00:00:23,770 --> 00:00:24,690 Hogy mi ez? 7 00:00:24,690 --> 00:00:28,270 >> Nos, kezdjük az elején, nézzük osztása lépésre. 8 00:00:28,270 --> 00:00:31,510 Fogsz szeretnénk megnyitni a bemeneti fájl hogy azok is, valamint a 9 00:00:31,510 --> 00:00:35,560 létre, és nyissa ki a kimeneti fájl, amely fogsz tenni a 10 00:00:35,560 --> 00:00:38,020 átméretezett képet be 11 00:00:38,020 --> 00:00:42,050 Aztán, mert te átméretezés, és mert ez egy bitmap, akkor a fejléc, így 12 00:00:42,050 --> 00:00:46,080 fogsz is frissítheti a fejléc információ a kimeneti fájl, 13 00:00:46,080 --> 00:00:47,950 és azt írja, hogy be 14 00:00:47,950 --> 00:00:51,850 Akkor fogsz olvasni a A scanline a bemeneti fájl, 15 00:00:51,850 --> 00:00:56,890 pixel-by-pixel, átméretezés vízszintesen és az írás azok a pixelek a 16 00:00:56,890 --> 00:01:00,910 outfile, meghatározott A felhasználó skálán. 17 00:01:00,910 --> 00:01:03,940 >> Fogsz emlékezni, hogy padding hozzá, ha szükséges. 18 00:01:03,940 --> 00:01:05,400 Bővebben később. 19 00:01:05,400 --> 00:01:07,790 És akkor is, átméretezés függőlegesen. 20 00:01:07,790 --> 00:01:08,890 OK. 21 00:01:08,890 --> 00:01:13,280 Tehát ez lesz egy kicsit bonyolultabb, mint a ki tette, de 22 00:01:13,280 --> 00:01:18,310 mi hasonló, hogy copy.c lesz, ismét igen hasznosnak bizonyulhat. 23 00:01:18,310 --> 00:01:23,160 Ne feledje, hogy copy.c megnyit egy fájlt, frissíti a fejléc információkat az 24 00:01:23,160 --> 00:01:28,250 outfile, akkor olvassa a scanline, pixel-by-pixel, amikor minden pixel 25 00:01:28,250 --> 00:01:30,510 a kimeneti fájl soronkénti. 26 00:01:30,510 --> 00:01:37,040 >> Tehát még egyszer, az első lépés lehet, hogy talán , hogy cp, copy.c, resize.c 27 00:01:37,040 --> 00:01:40,560 be a PSET5 könyvtárba. 28 00:01:40,560 --> 00:01:43,920 Ne feledje azonban, mielőtt másolni, , hogy megbizonyosodjon arról, hogy érti 29 00:01:43,920 --> 00:01:46,600 copy.c nagyon alaposan. 30 00:01:46,600 --> 00:01:47,620 OK. 31 00:01:47,620 --> 00:01:49,880 >> Szóval nyisson meg egy fájlt. 32 00:01:49,880 --> 00:01:50,870 Tudod, hogyan kell csinálni. 33 00:01:50,870 --> 00:01:52,600 Fogom hagyni, hogy az Ön számára. 34 00:01:52,600 --> 00:01:56,050 Ezután frissítse a fejléc információ A kimeneti fájl. 35 00:01:56,050 --> 00:01:59,240 Mert van egy új bitmap, már az új fejléc info. 36 00:01:59,240 --> 00:02:00,970 Mi változik itt? 37 00:02:00,970 --> 00:02:06,000 Nos, a fájl mérete meg fog változni mert megyünk, hogy több 38 00:02:06,000 --> 00:02:07,900 pixel, mint korábban. 39 00:02:07,900 --> 00:02:11,060 A kép mérete, így is fog változni, mint a 40 00:02:11,060 --> 00:02:13,050 szélessége és magassága. 41 00:02:13,050 --> 00:02:17,180 >> Tehát melyik változók azok pontosan? 42 00:02:17,180 --> 00:02:20,960 Nos, ha megnézi a fejléc információkat, látod van 43 00:02:20,960 --> 00:02:25,640 biSizeImage, ami a teljes kép méretét bájtban 44 00:02:25,640 --> 00:02:28,340 beleértve a pixel és padding. 45 00:02:28,340 --> 00:02:32,520 biWidth a szélessége a kép pixelben, mínusz a kitöltés. 46 00:02:32,520 --> 00:02:35,580 biHeight a magassága A kép pixel. 47 00:02:35,580 --> 00:02:39,200 És így ezek tartalmazzák a Struktúrák BITMAPFILEHEADER és 48 00:02:39,200 --> 00:02:40,390 BITMAPINFOHEADER. 49 00:02:40,390 --> 00:02:45,300 Meg tudod mondani, melyik melyik a fog bmp.h, és nézte a 50 00:02:45,300 --> 00:02:49,670 BITMAPINFOHEADER struct és látás változók a listába. 51 00:02:49,670 --> 00:02:54,700 >> Tehát, hogy frissítse a outfiles fejléc információt, akkor szeretne majd 52 00:02:54,700 --> 00:02:57,025 változtatni ezeket az értékeket a magasságát és szélességét. 53 00:02:57,025 --> 00:03:00,570 De esélye van, akkor lehet, hogy kell egy kis A bemeneti fájl fejlécének információ 54 00:03:00,570 --> 00:03:03,670 később, így a legjobb, hogy nyomon követhesse a két. 55 00:03:03,670 --> 00:03:07,770 De nagyon világos, a változó neveket úgy, hogy nem véletlenül 56 00:03:07,770 --> 00:03:12,490 írja a helytelen értékek A fejléc a kimeneti fájl. 57 00:03:12,490 --> 00:03:16,160 >> Most térjünk olvasás A soronkénti pixel-by-pixel. 58 00:03:16,160 --> 00:03:20,210 Ismét fogunk fordulni a megbízható fájl I / O könyvtár, és nézd meg 59 00:03:20,210 --> 00:03:22,100 A fread funkciót. 60 00:03:22,100 --> 00:03:26,150 fread vesz egy mutatót a struktúra , amely tartalmazni fogja a byte-ok 61 00:03:26,150 --> 00:03:30,130 olvasod be, a mérete minden eleme, hogy olvasod - 62 00:03:30,130 --> 00:03:34,410 Ismét, sizeof lesz hasznos működnek itt, a szám a 63 00:03:34,410 --> 00:03:38,820 elemei, méretbeli, hogy te olvasás, majd végül a 64 00:03:38,820 --> 00:03:41,310 inpointer, a fájl olvasod a. 65 00:03:41,310 --> 00:03:46,770 Így szedi számot elemet A méret inpointer, és 66 00:03:46,770 --> 00:03:49,040 helyezzük el őket adatokat. 67 00:03:49,040 --> 00:03:51,695 >> Most itt az ideje, hogy átméretezni vízszintesen. 68 00:03:51,695 --> 00:03:56,880 ha n értéke 2, akkor minden egyes képpont A bemeneti fájl fogunk írni, hogy 69 00:03:56,880 --> 00:04:00,870 kétszer a kimeneti fájl. 70 00:04:00,870 --> 00:04:02,210 Hogyan írunk fájlokat? 71 00:04:02,210 --> 00:04:06,400 Nos, mi van a fwrite funkciót, így Már a mutatót a struktúra 72 00:04:06,400 --> 00:04:10,170 tartalmazó byte, hogy te írásban, aztán át a 73 00:04:10,170 --> 00:04:14,430 mérete, száma, és a kimenet, ahol akkor lesz írásban. 74 00:04:14,430 --> 00:04:19,200 Majd ismételje meg a folyamatot, majd képes egy egyszerű iteratív hurok. 75 00:04:19,200 --> 00:04:21,740 >> De meg kell emlékezni hogy adjunk padding be 76 00:04:21,740 --> 00:04:26,040 A koncepció a padding az, hogy jól, minden egyes pixel három harap, de a 77 00:04:26,040 --> 00:04:28,940 mérete minden scanline kell lehet több 4 bájt. 78 00:04:28,940 --> 00:04:33,660 Tehát, ha a pixelek száma nem 4 többszöröse, meg kell, hogy adjunk néhány 79 00:04:33,660 --> 00:04:36,630 padding, ami csak nullák. 80 00:04:36,630 --> 00:04:42,130 Most, ellentétben ki tette, és ellentétben a példányt, majd infile kép és a 81 00:04:42,130 --> 00:04:44,370 outfile fájl már más van különböző padding mert ők 82 00:04:44,370 --> 00:04:46,360 különböző szélességű. 83 00:04:46,360 --> 00:04:46,690 >> OK. 84 00:04:46,690 --> 00:04:51,050 Így talán a képlet jöhet itt. 85 00:04:51,050 --> 00:04:55,120 Majd hagyjuk, hogy megtalálja ki, de mondani, hogy, hogy írjon padding, 86 00:04:55,120 --> 00:04:59,360 Nos, ez csak egy egyszerű fputc funkció halad a karakter 87 00:04:59,360 --> 00:05:02,200 kívánt írni, majd a fájl mutatót, amit 88 00:05:02,200 --> 00:05:04,280 szeretnék írni. 89 00:05:04,280 --> 00:05:08,670 Most, hogy már átméretezett vízszintesen, és akkor használják padding, 90 00:05:08,670 --> 00:05:12,030 ne feledjük, hogy meg kell mozgatni a fájlt helyzetjelző, mert 91 00:05:12,030 --> 00:05:14,480 nem fread a padding. 92 00:05:14,480 --> 00:05:18,230 Tehát azt szeretnénk, hogy győződjön meg arról, hogy a fájl helyzetjelző, a bemeneti fájl 93 00:05:18,230 --> 00:05:19,980 áll a megfelelő ponton. 94 00:05:19,980 --> 00:05:23,970 Mivel mi is szeretnénk átméretezés függőlegesen. 95 00:05:23,970 --> 00:05:27,090 Nem csak nyúlik vízszintesen, mert minden sorban igények 96 00:05:27,090 --> 00:05:30,370 másolni n-szer. 97 00:05:30,370 --> 00:05:33,050 >> Most, több különböző módja erre. 98 00:05:33,050 --> 00:05:39,010 Tehát az egyik, fel tudjuk használni a újraírása módszert, hogy emlékezzen az összes képpont 99 00:05:39,010 --> 00:05:42,840 egy adott sorban egy tömb, és akkor azt írjuk, hogy a tömb 100 00:05:42,840 --> 00:05:44,730 , ahányszor csak szükséges. 101 00:05:44,730 --> 00:05:49,530 Vagy ott van a recopy módszer, ahol, elolvasása után egy sorban a infile 102 00:05:49,530 --> 00:05:53,530 , majd írja le, hogy a kimeneti fájl, hozzátéve, a szivacs, mi fseek 103 00:05:53,530 --> 00:05:57,250 elejére vezet vissza az eredeti sor, majd ismételje meg a vízszintes 104 00:05:57,250 --> 00:05:58,710 átméretezés onnan. 105 00:05:58,710 --> 00:06:02,280 Függetlenül attól, hogy a módszer, mégis, akkor Szeretnénk minden pixel kell ismételni 106 00:06:02,280 --> 00:06:06,370 n-szer, és minden sorban, hogy n-szer megismétlődik is. 107 00:06:06,370 --> 00:06:09,160 >> Ezzel, akkor van bitmap nagyobb, mint az élet. 108 00:06:09,160 --> 00:06:11,760 A nevem Zamyla, és ez CS50. 109 00:06:11,760 --> 00:06:19,542