1 00:00:00,000 --> 00:00:10,210 >> [Predvaja glasba] 2 00:00:10,210 --> 00:00:13,320 >> ZAMYLA CHAN: Dajva udarec Stvari gor z velikost. 3 00:00:13,320 --> 00:00:17,710 V spreminjanje velikosti, bo uporabnik prenese v prek ukazni vrstici, bitna slika, ki 4 00:00:17,710 --> 00:00:21,860 hočejo, da lestvico, ki jo številne da so tudi oni potujejo v, 5 00:00:21,860 --> 00:00:23,770 v ukazno vrstico. 6 00:00:23,770 --> 00:00:24,690 Kako bomo to naredili? 7 00:00:24,690 --> 00:00:28,270 >> No, najprej stvari najprej, kaj je razdeliti v korake. 8 00:00:28,270 --> 00:00:31,510 Boste želeli odpreti INFILE da so ti dali, kot tudi 9 00:00:31,510 --> 00:00:35,560 ustvarjanje in odprite OUTFILE da boš dal 10 00:00:35,560 --> 00:00:38,020 spremenite velikost slike noter 11 00:00:38,020 --> 00:00:42,050 Potem, ker ste spreminjanje velikosti, in ker je bitna, pa glava, tako 12 00:00:42,050 --> 00:00:46,080 boš tudi posodobiti glavo Podatki za izhodna_datoteka, 13 00:00:46,080 --> 00:00:47,950 in pisati, da noter 14 00:00:47,950 --> 00:00:51,850 Nato boste prebrali v scanline v INFILE, 15 00:00:51,850 --> 00:00:56,890 pixel-by-pixel, spreminjanje velikosti vodoravno in pisanje teh pik v 16 00:00:56,890 --> 00:01:00,910 outfile, kot je določeno v uporabnikovem lestvici. 17 00:01:00,910 --> 00:01:03,940 >> Ti boš, da se spomnimo, da dodamo polnilo kot je potrebno. 18 00:01:03,940 --> 00:01:05,400 Več o tem kasneje. 19 00:01:05,400 --> 00:01:07,790 In potem, tudi spreminjanje velikosti navpično. 20 00:01:07,790 --> 00:01:08,890 OK. 21 00:01:08,890 --> 00:01:13,280 Torej, to se bo malo bolj zapleteno, kot kdo to storjeno, ampak 22 00:01:13,280 --> 00:01:18,310 kar je podobno, je, da copy.c bo še enkrat, zelo koristna. 23 00:01:18,310 --> 00:01:23,160 Ne pozabite, da copy.c odpre datoteko, posodobi informacije v glavi za 24 00:01:23,160 --> 00:01:28,250 outfile, nato pa prebere v scanline, pixel-by-pixel, pisanje vsak pixel 25 00:01:28,250 --> 00:01:30,510 v scanline izhodne datoteke je. 26 00:01:30,510 --> 00:01:37,040 >> Torej še enkrat, morda vaš prvi korak verjetno biti cp, copy.c, resize.c 27 00:01:37,040 --> 00:01:40,560 v vašem PSET5 imenik. 28 00:01:40,560 --> 00:01:43,920 Ne pozabite, čeprav, preden ga boste kopirali, se prepričajte, da boste razumeli 29 00:01:43,920 --> 00:01:46,600 Zelo temeljito copy.c. 30 00:01:46,600 --> 00:01:47,620 OK. 31 00:01:47,620 --> 00:01:49,880 >> Torej, odprimo datoteko. 32 00:01:49,880 --> 00:01:50,870 Saj veste, kako to storiti. 33 00:01:50,870 --> 00:01:52,600 Bom prepustil tebi. 34 00:01:52,600 --> 00:01:56,050 Naslednja posodobi informacije v glavi za izhodna_datoteka. 35 00:01:56,050 --> 00:01:59,240 Ker imamo novo bitno sliko, imamo več informacij glavo. 36 00:01:59,240 --> 00:02:00,970 Kaj se je spremenilo tu? 37 00:02:00,970 --> 00:02:06,000 No, velikost datoteke se bo spremenilo saj bomo imeli več 38 00:02:06,000 --> 00:02:07,900 slikovnih pik kot prej. 39 00:02:07,900 --> 00:02:11,060 Velikost slike je, torej, tudi bo spremenilo, kot je 40 00:02:11,060 --> 00:02:13,050 širina in višina. 41 00:02:13,050 --> 00:02:17,180 >> Torej, katere spremenljivke so tiste, točno? 42 00:02:17,180 --> 00:02:20,960 No, če pogledaš na glavi Podatki, ki jih vidite, da je 43 00:02:20,960 --> 00:02:25,640 biSizeImage, ki predstavlja skupno velikost slike v bajtih 44 00:02:25,640 --> 00:02:28,340 vključno pik in oblazinjenja. 45 00:02:28,340 --> 00:02:32,520 biWidth je širina slike v pikslih, minus oblazinjenje. 46 00:02:32,520 --> 00:02:35,580 biHeight je višina slike v pikslih. 47 00:02:35,580 --> 00:02:39,200 In tako tistih, ki so vsebovani v konstruktov BITMAPFILEHEADER in 48 00:02:39,200 --> 00:02:40,390 BITMAPINFOHEADER. 49 00:02:40,390 --> 00:02:45,300 Lahko poveste, katera je, ki jih bo bmp.h in gledaš 50 00:02:45,300 --> 00:02:49,670 BITMAPINFOHEADER struct in videnje spremenljivke, ki so tam navedene. 51 00:02:49,670 --> 00:02:54,700 >> Torej posodobiti outfiles glavo informacije, boste želeli 52 00:02:54,700 --> 00:02:57,025 spremenite te vrednosti višina in širina. 53 00:02:57,025 --> 00:03:00,570 Vendar so možnosti, boste morda potrebovali nekaj informacij v glavi INFILE je 54 00:03:00,570 --> 00:03:03,670 kasneje, zato najbolje, da spremljate tako. 55 00:03:03,670 --> 00:03:07,770 Vendar je bilo zelo jasno, z vašo spremenljivko imena, tako da ne boste po nesreči 56 00:03:07,770 --> 00:03:12,490 pisati napačne vrednosti v Glava za izhodna_datoteka. 57 00:03:12,490 --> 00:03:16,160 >> Torej, zdaj pojdimo k branju v scanline pixel-by-pixel. 58 00:03:16,160 --> 00:03:20,210 Spet bomo obrniti na naši zvesti / I datoteke knjižnico in poglej 59 00:03:20,210 --> 00:03:22,100 fread funkcijo. 60 00:03:22,100 --> 00:03:26,150 fread traja v kazalec na struct , ki bo vseboval bajte, ki 61 00:03:26,150 --> 00:03:30,130 berete v, velikost vsakega element, ki berete - 62 00:03:30,130 --> 00:03:34,410 še enkrat, sizeof se bo koristno delovanje tod število 63 00:03:34,410 --> 00:03:38,820 Elementi velikosti, velikosti, da si branje v in se na koncu, 64 00:03:38,820 --> 00:03:41,310 inpointer, datoteka, ki berete iz. 65 00:03:41,310 --> 00:03:46,770 Torej ste ob številčnih elementov velikosti od inpointer ter 66 00:03:46,770 --> 00:03:49,040 začetek njihove podatke. 67 00:03:49,040 --> 00:03:51,695 >> Zdaj je čas, da vodoravno velikost. 68 00:03:51,695 --> 00:03:56,880 če je n enak 2, nato pa za vsako slikovno točko v INFILE, bomo pisati 69 00:03:56,880 --> 00:04:00,870 dvakrat na izhodna_datoteka. 70 00:04:00,870 --> 00:04:02,210 Kako napisati datoteke? 71 00:04:02,210 --> 00:04:06,400 No, imamo fwrite funkcijo, tako smo vzeli kazalec na struct 72 00:04:06,400 --> 00:04:10,170 , ki vsebuje bajte, da ste pisni obliki, nato pa se peljemo v 73 00:04:10,170 --> 00:04:14,430 velikost, število in izhod, kjer boš pisal, da je. 74 00:04:14,430 --> 00:04:19,200 In nato ponovite postopek, bo lahko preprosto ponavljajoč zanko. 75 00:04:19,200 --> 00:04:21,740 >> Vendar moramo zapomniti dodati oblazinjenje prijavite 76 00:04:21,740 --> 00:04:26,040 Pojem oblazinjenja je, da tudi, Vsak pixel je tri ugrizi, vendar 77 00:04:26,040 --> 00:04:28,940 Velikost vsakega scanline mošta večkratnik števila 4 bajte. 78 00:04:28,940 --> 00:04:33,660 Torej, če število točk ne večkratnik števila 4, moramo dodati nekaj 79 00:04:33,660 --> 00:04:36,630 oblazinjenje, ki je le ničle. 80 00:04:36,630 --> 00:04:42,130 Zdaj pa, za razliko Kdo to storjeno, in za razliko od kopijo, nato pa INFILE podoba in 81 00:04:42,130 --> 00:04:44,370 outfile datoteke so drugačni imajo drugačno oblazinjenje, ker oni 82 00:04:44,370 --> 00:04:46,360 različne širine. 83 00:04:46,360 --> 00:04:46,690 >> OK. 84 00:04:46,690 --> 00:04:51,050 Torej, morda bi formulo prišel prav tukaj. 85 00:04:51,050 --> 00:04:55,120 Bom pustil na vas, da ga najdejo, vendar vam povem, da, da napišete oblazinjenje, 86 00:04:55,120 --> 00:04:59,360 no, to je samo preprosta funkcija fputc, , ki poteka v značaju 87 00:04:59,360 --> 00:05:02,200 , ki jo želite napisati, in nato Datoteka kazalec, ki ga 88 00:05:02,200 --> 00:05:04,280 želim pisati. 89 00:05:04,280 --> 00:05:08,670 Torej sedaj, ko smo spreminjati vodoravno in nato uporablja obloga 90 00:05:08,670 --> 00:05:12,030 ne pozabite, da boste morali premakniti datoteko Kazalnik položaja, ker vam 91 00:05:12,030 --> 00:05:14,480 ne more fread v oblazinjenja. 92 00:05:14,480 --> 00:05:18,230 Tako da boste želeli, da poskrbite, da vaša datoteka Kazalnik položaja v INFILE 93 00:05:18,230 --> 00:05:19,980 je na pravo mesto. 94 00:05:19,980 --> 00:05:23,970 Ker želimo, da tudi spremenite velikost navpično. 95 00:05:23,970 --> 00:05:27,090 Ne moremo se raztezajo vodoravno, ker vsaka vrstica potrebe 96 00:05:27,090 --> 00:05:30,370 je treba kopirati n-krat. 97 00:05:30,370 --> 00:05:33,050 >> Sedaj je na voljo več različnih načinov, da to storijo. 98 00:05:33,050 --> 00:05:39,010 Torej eno, lahko uporabimo metodo reportaža, v da se spomnimo vseh pikslov 99 00:05:39,010 --> 00:05:42,840 v dani vrsti v matriki, in Nato smo napisali, da je niz, kot je 100 00:05:42,840 --> 00:05:44,730 tolikokrat, kot je potrebno. 101 00:05:44,730 --> 00:05:49,530 Ali obstaja način recopy, kjer po branju v eni vrsti v INFILE 102 00:05:49,530 --> 00:05:53,530 in nato obvestita, da v izhodna_datoteka, dodajanje oblazinjenje, smo fseek 103 00:05:53,530 --> 00:05:57,250 nazaj na začetek prvotne zapored in nato ponovite vodoravno 104 00:05:57,250 --> 00:05:58,710 spreminjanje velikosti od tam. 105 00:05:58,710 --> 00:06:02,280 Ne glede na metodo, čeprav, boste želimo, da vsak pixel je treba ponoviti 106 00:06:02,280 --> 00:06:06,370 n-krat, in vsaka vrstica biti ponovi n-krat, kakor tudi. 107 00:06:06,370 --> 00:06:09,160 >> S tem boste imeli bitne slike večji od življenja. 108 00:06:09,160 --> 00:06:11,760 Ime je Zamyla, in to je CS50. 109 00:06:11,760 --> 00:06:19,542