1 00:00:00,000 --> 00:00:10,210 >> [Muusika mängib] 2 00:00:10,210 --> 00:00:13,320 >> ZAMYLA chan Laseme asjad korda resize. 3 00:00:13,320 --> 00:00:17,710 In resize, kasutaja läbima kaudu käsurealt Rasterpildi et 4 00:00:17,710 --> 00:00:21,860 nad tahavad sind skaala järgi number et nad ka läbima, 5 00:00:21,860 --> 00:00:23,770 käsureal. 6 00:00:23,770 --> 00:00:24,690 Kuidas me seda teeme? 7 00:00:24,690 --> 00:00:28,270 >> Noh, esimesed asjad kõigepealt, lähme jaotada see samme. 8 00:00:28,270 --> 00:00:31,510 Sa lähed tahan avada infile et nad teile, samuti 9 00:00:31,510 --> 00:00:35,560 luua ja avada outfile et sa lähed panna 10 00:00:35,560 --> 00:00:38,020 suurusega pildi sisse 11 00:00:38,020 --> 00:00:42,050 Siis, sest sa oled saneerimist ja sest see on bitmap, see header, nii 12 00:00:42,050 --> 00:00:46,080 sa lähed ka update kaudu teave outfile, 13 00:00:46,080 --> 00:00:47,950 ja kirjutame sisse 14 00:00:47,950 --> 00:00:51,850 Siis sa lähed välja lugeda scanline of infile, 15 00:00:51,850 --> 00:00:56,890 pixel-by-pixel, saneerimist horisontaalselt ja kirjalikult nende pikslite 16 00:00:56,890 --> 00:01:00,910 outfile täpsustatud kasutaja skaala. 17 00:01:00,910 --> 00:01:03,940 >> Sa lähed mäleta lisada padding kui vaja. 18 00:01:03,940 --> 00:01:05,400 Veel selle hiljem. 19 00:01:05,400 --> 00:01:07,790 Ja siis ka suurust vertikaalselt. 20 00:01:07,790 --> 00:01:08,890 OK. 21 00:01:08,890 --> 00:01:13,280 Nii et see saab olema natuke rohkem keerulisem kui Kes teinud, kuid 22 00:01:13,280 --> 00:01:18,310 mis on sarnane see, et copy.c tahte jällegi osutuda väga kasulikuks. 23 00:01:18,310 --> 00:01:23,160 Pea meeles, et copy.c avab faili, värskendab header teave 24 00:01:23,160 --> 00:01:28,250 outfile, siis loeb sisse scanline, pixel-by-pixel, kirjutades iga piksli 25 00:01:28,250 --> 00:01:30,510 arvesse väljund faili scanline. 26 00:01:30,510 --> 00:01:37,040 >> Nii et taas, teie esimene samm võiks ilmselt olema cp, copy.c, resize.c 27 00:01:37,040 --> 00:01:40,560 oma PSET5 kataloog. 28 00:01:40,560 --> 00:01:43,920 Pidage meeles, enne kui sa kuuled seda, veenduge, et saate aru, 29 00:01:43,920 --> 00:01:46,600 copy.c väga põhjalikult. 30 00:01:46,600 --> 00:01:47,620 OK. 31 00:01:47,620 --> 00:01:49,880 >> Teeme avada faili. 32 00:01:49,880 --> 00:01:50,870 Sa tead, kuidas seda teha. 33 00:01:50,870 --> 00:01:52,600 Ma jätan selle sulle. 34 00:01:52,600 --> 00:01:56,050 Seejärel ajakohastab päiseinformatsiooni jaoks outfile. 35 00:01:56,050 --> 00:01:59,240 Kuna meil on uus bitmap, meil uus header info. 36 00:01:59,240 --> 00:02:00,970 Mis muutuvas siin? 37 00:02:00,970 --> 00:02:06,000 Noh, faili suurus on muutu sest me ei kavatse olla rohkem 38 00:02:06,000 --> 00:02:07,900 piksleid kui enne. 39 00:02:07,900 --> 00:02:11,060 Pildi suurus on seega ka muutu, kui see on 40 00:02:11,060 --> 00:02:13,050 laius ja kõrgus. 41 00:02:13,050 --> 00:02:17,180 >> Nii et mis muutujad on sellised, täpselt? 42 00:02:17,180 --> 00:02:20,960 Noh, kui sa vaatad kaudu teave, näed seal on 43 00:02:20,960 --> 00:02:25,640 biSizeImage, mis moodustab kokku pildi suurus baitides 44 00:02:25,640 --> 00:02:28,340 sealhulgas pikslit ja polster. 45 00:02:28,340 --> 00:02:32,520 biWidth on laiusega pilt pikslites miinus polster. 46 00:02:32,520 --> 00:02:35,580 biHeight on kõrgus pilt pikslit. 47 00:02:35,580 --> 00:02:39,200 Ja nii need sisalduvad structs BITMAPFILEHEADER ja 48 00:02:39,200 --> 00:02:40,390 BITMAPINFOHEADER. 49 00:02:40,390 --> 00:02:45,300 Te võite öelda, milline neist on mis, mida läheb bmp.h ja vaadates 50 00:02:45,300 --> 00:02:49,670 BITMAPINFOHEADER struct ja nägemine Millised muutujad on seal loetletud. 51 00:02:49,670 --> 00:02:54,700 >> Nii uuendada outfiles kaudu teave, sa lähed, et tahad 52 00:02:54,700 --> 00:02:57,025 muuta need väärtused kõrgus ja laius. 53 00:02:57,025 --> 00:03:00,570 Aga võimalused on, te võite vajada Euroopa infile päises info 54 00:03:00,570 --> 00:03:03,670 hiljem, et kõige paremini jälgida nii. 55 00:03:03,670 --> 00:03:07,770 Aga väga selgelt oma muutuja nimed, nii et sa ei kogemata 56 00:03:07,770 --> 00:03:12,490 kirjutada vale väärtused päises outfile. 57 00:03:12,490 --> 00:03:16,160 >> Nüüd lähme lugemisel vastu võetud scanline pixel-by-pixel. 58 00:03:16,160 --> 00:03:20,210 Jällegi, me pöördume meie ustav faili I / O teek ja vaata 59 00:03:20,210 --> 00:03:22,100 fread funktsioon. 60 00:03:22,100 --> 00:03:26,150 fread võtab kursor struct mis sisaldab bytes et 61 00:03:26,150 --> 00:03:30,130 sa loed, suurus iga element, et sa loed - 62 00:03:30,130 --> 00:03:34,410 uuesti, sizeof saab olema kasulik funktsioneerida siin mitmeid 63 00:03:34,410 --> 00:03:38,820 elementide suurus, suurus, et sa oled lugemine ja seejärel lõpuks 64 00:03:38,820 --> 00:03:41,310 inpointer, fail sa loed alates. 65 00:03:41,310 --> 00:03:46,770 Nii et sa võtad number elemendid suurus alates inpointer ja 66 00:03:46,770 --> 00:03:49,040 laskmiseks andmed. 67 00:03:49,040 --> 00:03:51,695 >> Nüüd on aeg suurust horisontaalselt. 68 00:03:51,695 --> 00:03:56,880 kui n on 2, siis iga piksel infile, me ei kavatse kirjutada 69 00:03:56,880 --> 00:04:00,870 kaks korda outfile. 70 00:04:00,870 --> 00:04:02,210 Kuidas kirjutada faile? 71 00:04:02,210 --> 00:04:06,400 Noh, meil on fwrite funktsioon, nii et oleme võtnud kursor struct 72 00:04:06,400 --> 00:04:10,170 mis sisaldab bytes, et sa oled kirjutamise ja siis liigu 73 00:04:10,170 --> 00:04:14,430 suurus, arv ja võimsus, kus sa lähed olema kirjalikult. 74 00:04:14,430 --> 00:04:19,200 Ja siis korrata protsessi saab võimalik lihtsa iteratiivne silmus. 75 00:04:19,200 --> 00:04:21,740 >> Aga me peame meeles pidama, lisada padding sisse 76 00:04:21,740 --> 00:04:26,040 Mõiste polster on selles, et, noh, Iga piksel on kolm hammustab, kuid 77 00:04:26,040 --> 00:04:28,940 suurus iga scanline must olema mitu 4 baiti. 78 00:04:28,940 --> 00:04:33,660 Nii et kui pikslite arv ei ole mitmekordselt 4, meil on vaja lisada mõned 79 00:04:33,660 --> 00:04:36,630 polster, mis on vaid nullid. 80 00:04:36,630 --> 00:04:42,130 Nüüd erinevalt Kes teinud, ning erinevalt koopia, siis infile pilt ja 81 00:04:42,130 --> 00:04:44,370 outfile fail on erinev olema erinev polster, sest nad on 82 00:04:44,370 --> 00:04:46,360 erineva laiusega. 83 00:04:46,360 --> 00:04:46,690 >> OK. 84 00:04:46,690 --> 00:04:51,050 Nii et ehk jaotusvalemist tulla käepärane siin. 85 00:04:51,050 --> 00:04:55,120 Ma jätan selle teile seda välja selgitada, kuid öelda, et kirjutada polster 86 00:04:55,120 --> 00:04:59,360 noh, see on lihtsalt fputc funktsiooni kulgeb iseloomu 87 00:04:59,360 --> 00:05:02,200 et sa tahad kirjutada, ja siis file pointer, et sa 88 00:05:02,200 --> 00:05:04,280 soovite kirjutada. 89 00:05:04,280 --> 00:05:08,670 Nüüd, et me oleme suurust horisontaalselt, ja siis kasutada polster 90 00:05:08,670 --> 00:05:12,030 pidage meeles, et kui teil on vaja faili asendinäidu, sest sa 91 00:05:12,030 --> 00:05:14,480 ei fread arvesse polster. 92 00:05:14,480 --> 00:05:18,230 Nii et sa tahad veenduda, et teie fail koht märgi infile 93 00:05:18,230 --> 00:05:19,980 on õige koht. 94 00:05:19,980 --> 00:05:23,970 Sest me tahame suurust vertikaalselt. 95 00:05:23,970 --> 00:05:27,090 Me ei saa lihtsalt venitada horisontaalselt, sest iga rida vajadusi 96 00:05:27,090 --> 00:05:30,370 tohi kopeerida n korda. 97 00:05:30,370 --> 00:05:33,050 >> Nüüd on mitmeid erinevaid kuidas seda teha. 98 00:05:33,050 --> 00:05:39,010 Nii et üks, saame kasutada ümberkirjutamine meetodi kohta et me mäletame kõik pikslid 99 00:05:39,010 --> 00:05:42,840 antud rida massiivi ja siis me kirjutame, et massiivi 100 00:05:42,840 --> 00:05:44,730 mitu korda kui vaja. 101 00:05:44,730 --> 00:05:49,530 Või seal recopy meetod, kus pärast lugemist ühel real infile 102 00:05:49,530 --> 00:05:53,530 ja seejärel kirjalikult, et võtta outfile, Lisades polster me fseek 103 00:05:53,530 --> 00:05:57,250 Tagasi algust esialgse rea ja korrake horisontaalne 104 00:05:57,250 --> 00:05:58,710 saneerimist sealt. 105 00:05:58,710 --> 00:06:02,280 Sõltumata meetodist, kuigi, saate tahan, et iga piksel korrata 106 00:06:02,280 --> 00:06:06,370 n korda ja igal real olla korrata n korda samuti. 107 00:06:06,370 --> 00:06:09,160 >> Koos, et teil on bitmap suurem kui elu. 108 00:06:09,160 --> 00:06:11,760 Minu nimi on Zamyla ja see on CS50. 109 00:06:11,760 --> 00:06:19,542