1 00:00:00,000 --> 00:00:10,210 >> [Musiikki soi] 2 00:00:10,210 --> 00:00:13,320 >> ZAMYLA Chan: Let n isku asioita, joissa resize. 3 00:00:13,320 --> 00:00:17,710 Vuonna kokoa, käyttäjä kulkea kautta komentoriviltä, ​​bittikarttakuvana että 4 00:00:17,710 --> 00:00:21,860 he haluavat sinun mittakaavassa numero että ne myös kulkea, 5 00:00:21,860 --> 00:00:23,770 komentoriville. 6 00:00:23,770 --> 00:00:24,690 Miten teemme tämän? 7 00:00:24,690 --> 00:00:28,270 >> No, asiat ensin, katsotaanpa jakaa järjestelmä vaiheita. 8 00:00:28,270 --> 00:00:31,510 Olet menossa halua avata infile että he antavat sinulle, sekä 9 00:00:31,510 --> 00:00:35,560 luoda ja avata outfile että aiot laittaa 10 00:00:35,560 --> 00:00:38,020 kokoa kuvan sisään 11 00:00:38,020 --> 00:00:42,050 Sitten, koska olet kokoa, ja koska se on bittikartta, se otsikon, niin 12 00:00:42,050 --> 00:00:46,080 aiot päivittää myös otsikon tietoa outfile, 13 00:00:46,080 --> 00:00:47,950 ja kirjoittaa, että sisään 14 00:00:47,950 --> 00:00:51,850 Sitten aiot lukea osaksi juova ja infile, 15 00:00:51,850 --> 00:00:56,890 pixel-by-pixel, koon vaakasuunnassa ja kirjoittamisen kuvapisteryhmistä 16 00:00:56,890 --> 00:01:00,910 outfile määritellyllä jonka käyttäjän asteikon. 17 00:01:00,910 --> 00:01:03,940 >> Olet menossa muistaa Lisää täyte tarpeen. 18 00:01:03,940 --> 00:01:05,400 Siitä lisää myöhemmin. 19 00:01:05,400 --> 00:01:07,790 Ja sitten, myös kokoa pystysuunnassa. 20 00:01:07,790 --> 00:01:08,890 OK. 21 00:01:08,890 --> 00:01:13,280 Joten tämä tulee olemaan hieman enemmän monimutkaisempi kuin kuka tehnyt sen, mutta 22 00:01:13,280 --> 00:01:18,310 mitä vastaavia on, että copy.c tulee, jälleen osoittautua erittäin hyödyllistä. 23 00:01:18,310 --> 00:01:23,160 Muista, että copy.c avaa tiedoston, päivittää otsikon tiedot 24 00:01:23,160 --> 00:01:28,250 outfile, sitten lukee osaksi juova, pixel-by-pixel, kirjallisesti joka pikseli 25 00:01:28,250 --> 00:01:30,510 tulosteeseen tiedoston juova. 26 00:01:30,510 --> 00:01:37,040 >> Joten jälleen, ensimmäinen askel voisi varmaan olla cp, copy.c, resize.c 27 00:01:37,040 --> 00:01:40,560 omaan PSET5 hakemistoon. 28 00:01:40,560 --> 00:01:43,920 Muista kuitenkin, ennen kuin kopioit sen, varmista, että ymmärrät 29 00:01:43,920 --> 00:01:46,600 copy.c hyvin perusteellisesti. 30 00:01:46,600 --> 00:01:47,620 OK. 31 00:01:47,620 --> 00:01:49,880 >> Joten avaa tiedoston. 32 00:01:49,880 --> 00:01:50,870 Tiedät miten se tehdään. 33 00:01:50,870 --> 00:01:52,600 Aion jättää sen sinulle. 34 00:01:52,600 --> 00:01:56,050 Seuraavaksi päivitetään otsikkotiedot varten outfile. 35 00:01:56,050 --> 00:01:59,240 Koska meillä on uusi bittikartta, meillä on uusi otsikko info. 36 00:01:59,240 --> 00:02:00,970 Mikä muuttuu täällä? 37 00:02:00,970 --> 00:02:06,000 No, tiedostokoko tulee muuttumaan koska aiomme olla enemmän 38 00:02:06,000 --> 00:02:07,900 pikseleitä kuin ennen. 39 00:02:07,900 --> 00:02:11,060 Kuvakoko on siis myös tulee muuttumaan, sillä on 40 00:02:11,060 --> 00:02:13,050 leveys ja korkeus. 41 00:02:13,050 --> 00:02:17,180 >> Joten mikä muuttujat ovat ne, tarkalleen? 42 00:02:17,180 --> 00:02:20,960 No, jos tarkastellaan otsikkoon tietoja, näet siellä on 43 00:02:20,960 --> 00:02:25,640 biSizeImage, joka edustaa yhteensä kuvan koko tavuina 44 00:02:25,640 --> 00:02:28,340 lukien pikseliä ja pehmusteet. 45 00:02:28,340 --> 00:02:32,520 biWidth on kuvan leveyden pikseleinä miinus täyte. 46 00:02:32,520 --> 00:02:35,580 biHeight on korkeus kuvan pikseleinä. 47 00:02:35,580 --> 00:02:39,200 Ja niin nämä sisältyvät structs BITMAPFILEHEADER ja 48 00:02:39,200 --> 00:02:40,390 BITMAPINFOHEADER. 49 00:02:40,390 --> 00:02:45,300 Voit kertoa kumpi on kumpi by menossa bmp.h ja katsot 50 00:02:45,300 --> 00:02:49,670 BITMAPINFOHEADER struct ja näkeminen mitkä muuttujat on lueteltu siinä. 51 00:02:49,670 --> 00:02:54,700 >> Joten päivittää outfiles header tietoa, olet menossa haluavat 52 00:02:54,700 --> 00:02:57,025 muuttaa näitä arvoja korkeus ja leveys. 53 00:02:57,025 --> 00:03:00,570 Mutta mahdollisuudet ovat, voit tarvita ja infile n otsikkotietoja 54 00:03:00,570 --> 00:03:03,670 myöhemmin, joten paras seurata molempia. 55 00:03:03,670 --> 00:03:07,770 Mutta olla hyvin selkeä muuttuja nimiä niin, että et ole vahingossa 56 00:03:07,770 --> 00:03:12,490 kirjoittaa virheellisiä arvoja otsikon outfile. 57 00:03:12,490 --> 00:03:16,160 >> Joten nyt käykäämme luettavaksi juova pikseli pikseli. 58 00:03:16,160 --> 00:03:20,210 Jälleen aiomme kääntyä meidän luotettava tiedoston I / O-kirjasto ja katso 59 00:03:20,210 --> 00:03:22,100 fread toiminto. 60 00:03:22,100 --> 00:03:26,150 fread vie osoitin struct joka sisältää tavujen 61 00:03:26,150 --> 00:03:30,130 luet vuonna, koko kunkin elementti, joka luet - 62 00:03:30,130 --> 00:03:34,410 jälleen, sizeof tulee olemaan hyödyllinen tässä tapauksessa toimi määrä 63 00:03:34,410 --> 00:03:38,820 osia koon, kokoa, että olet käsittelyssä, ja sitten lopulta, 64 00:03:38,820 --> 00:03:41,310 inpointer, tiedosto, luet alkaen. 65 00:03:41,310 --> 00:03:46,770 Joten olet ottaen useita elementtejä koosta alkaen inpointer, ja 66 00:03:46,770 --> 00:03:49,040 laskemisesta tietoja. 67 00:03:49,040 --> 00:03:51,695 >> Nyt on aika muuttaa vaakasuunnassa. 68 00:03:51,695 --> 00:03:56,880 jos n on 2, niin kunkin pikselin infile, aiomme kirjoittaa sitä 69 00:03:56,880 --> 00:04:00,870 kahdesti outfile. 70 00:04:00,870 --> 00:04:02,210 Miten voimme kirjoittaa tiedostoja? 71 00:04:02,210 --> 00:04:06,400 No, meillä on fwrite toiminto, joten olemme ottaneet osoitin struct 72 00:04:06,400 --> 00:04:10,170 joka sisältää tavut, että olet kirjallisesti, ja sitten me kulkea 73 00:04:10,170 --> 00:04:14,430 koko, lukumäärä, ja lähtö, jossa aiot olla kirjallisesti että. 74 00:04:14,430 --> 00:04:19,200 Ja sitten toistaa prosessi, on pystyy yksinkertainen iteratiivinen silmukan. 75 00:04:19,200 --> 00:04:21,740 >> Mutta meidän täytyy muistaa Lisää täyte sisään 76 00:04:21,740 --> 00:04:26,040 Käsite pehmuste on, että hyvin, jokainen pikseli on kolme puremat, mutta 77 00:04:26,040 --> 00:04:28,940 koko kunkin juova must olla 4 tavun kerrannainen. 78 00:04:28,940 --> 00:04:33,660 Joten jos pikselien määrä ei ole jaollinen 4, meidän täytyy lisätä joitakin 79 00:04:33,660 --> 00:04:36,630 pehmuste, joka on vain nollia. 80 00:04:36,630 --> 00:04:42,130 Nyt, toisin kuin Who Done It, ja toisin kuin kopio, sitten infile kuva ja 81 00:04:42,130 --> 00:04:44,370 outfile tiedosto on erilainen on eri padding koska he 82 00:04:44,370 --> 00:04:46,360 eri leveyksiä. 83 00:04:46,360 --> 00:04:46,690 >> OK. 84 00:04:46,690 --> 00:04:51,050 Joten ehkä kaava olisi ovat käteviä täällä. 85 00:04:51,050 --> 00:04:55,120 Jätän sen sinulle löytää sitä, mutta kertoa teille, kirjoittaa täyte, 86 00:04:55,120 --> 00:04:59,360 No, se on vain yksinkertainen fputc toiminto, ohimennen merkki 87 00:04:59,360 --> 00:05:02,200 että haluat kirjoittaa, ja sitten tiedoston osoitin, että olet 88 00:05:02,200 --> 00:05:04,280 haluat kirjoittaa. 89 00:05:04,280 --> 00:05:08,670 Joten nyt olemme kokoa vaakasuunnassa, ja sitten käytetään täyte, 90 00:05:08,670 --> 00:05:12,030 Muista, että sinun tarvitsee siirtää tiedoston asennonosoittimen, koska olet 91 00:05:12,030 --> 00:05:14,480 voi fread osaksi täyte. 92 00:05:14,480 --> 00:05:18,230 Joten haluat varmistaa, että tiedosto Asennonosoitin infile 93 00:05:18,230 --> 00:05:19,980 on oikeassa kohdassa. 94 00:05:19,980 --> 00:05:23,970 Koska haluamme myös kokoa pystysuunnassa. 95 00:05:23,970 --> 00:05:27,090 Emme voi vain venyttää se vaakasuoraan, koska jokainen rivi tarpeisiin 96 00:05:27,090 --> 00:05:30,370 kopioitava n kertaa. 97 00:05:30,370 --> 00:05:33,050 >> Nyt on olemassa useita erilaisia tapoja tehdä tätä. 98 00:05:33,050 --> 00:05:39,010 Joten, voimme käyttää uudelleenkirjoitus menetelmää, vuonna että muistamme kaikki pikseliä 99 00:05:39,010 --> 00:05:42,840 Tietyn rivin array, ja sitten kirjoittaa, että levyjärjestelmän 100 00:05:42,840 --> 00:05:44,730 monta kertaa kuin tarvitaan. 101 00:05:44,730 --> 00:05:49,530 Tai siellä recopy menetelmä, jossa, lukemisen jälkeen yksi rivi infile 102 00:05:49,530 --> 00:05:53,530 ja sitten kirjallisesti, että osaksi outfile, lisäämällä täyte, me fseek 103 00:05:53,530 --> 00:05:57,250 takaisin alkuun alkuperäisen rivin, ja toista sitten vaaka 104 00:05:57,250 --> 00:05:58,710 koon sieltä. 105 00:05:58,710 --> 00:06:02,280 Menetelmästä riippumatta, vaikka, sinun Haluan jokaisen pikselin toistua 106 00:06:02,280 --> 00:06:06,370 n kertaa, ja jokainen rivi on toistetaan n kertaa yhtä hyvin. 107 00:06:06,370 --> 00:06:09,160 >> Kanssa, että sinulla on bittikartta elämää suurempia. 108 00:06:09,160 --> 00:06:11,760 Nimeni on Zamyla, ja tämä on CS50. 109 00:06:11,760 --> 00:06:19,542