1 00:00:00,000 --> 00:00:10,210 >> [MUSIC Playing] 2 00:00:10,210 --> 00:00:13,320 >> ZAMYLA CHAN: goditje Le gjërat deri me resize. 3 00:00:13,320 --> 00:00:17,710 Në resize, përdoruesi do të kalojë në, nëpërmjet command line, një imazh bitmap që 4 00:00:17,710 --> 00:00:21,860 ata duan që ju të shkallë nga një numër që edhe ata të kalojnë në, 5 00:00:21,860 --> 00:00:23,770 në vijën komanduese. 6 00:00:23,770 --> 00:00:24,690 Si e bëjmë këtë? 7 00:00:24,690 --> 00:00:28,270 >> E pra, gjërat e para e para, le të të thyer këtë poshtë në hapa. 8 00:00:28,270 --> 00:00:31,510 Ju jeni do të duan për të hapur infile që të japë, si dhe 9 00:00:31,510 --> 00:00:35,560 të krijojë dhe të hapur outfile që ju do të jeni për të vënë 10 00:00:35,560 --> 00:00:38,020 image ndryshohet madhësia in 11 00:00:38,020 --> 00:00:42,050 Pastaj, për shkak se ju jeni duke ndryshuar, dhe të sepse kjo është një bitmap, atë një header, kështu 12 00:00:42,050 --> 00:00:46,080 ju do të jeni për të rinovuar header Informata për outfile, 13 00:00:46,080 --> 00:00:47,950 dhe shkruajnë se in 14 00:00:47,950 --> 00:00:51,850 Pastaj, ju do të jeni për të lexuar në scanline i infile, 15 00:00:51,850 --> 00:00:56,890 pixel-nga-piksel, duke ndryshuar horizontalisht dhe shkrim ato piksele në 16 00:00:56,890 --> 00:01:00,910 outfile, siç është specifikuar nga shkallë të përdoruesit. 17 00:01:00,910 --> 00:01:03,940 >> Ju jeni do të mbani mend që të shtoni mbushje sipas nevojës. 18 00:01:03,940 --> 00:01:05,400 Më shumë për këtë më vonë. 19 00:01:05,400 --> 00:01:07,790 Dhe pastaj, edhe resize vertikalisht. 20 00:01:07,790 --> 00:01:08,890 OK. 21 00:01:08,890 --> 00:01:13,280 Pra, kjo do të jetë pak më shumë komplikuar se Kush Done It, por 22 00:01:13,280 --> 00:01:18,310 çfarë është e ngjashme është se copy.c do, përsëri, të provojë shumë i dobishëm. 23 00:01:18,310 --> 00:01:23,160 Mos harroni se copy.c hap një dosje, azhurnon informacionin header për 24 00:01:23,160 --> 00:01:28,250 outfile, pastaj lexon në scanline, pixel-nga-piksel, duke shkruar çdo piksel 25 00:01:28,250 --> 00:01:30,510 në scanline e prodhimit file-së. 26 00:01:30,510 --> 00:01:37,040 >> Pra, përsëri, hapi juaj i parë mund ndoshta të jetë në krah, copy.c, resize.c 27 00:01:37,040 --> 00:01:40,560 në directory tuaj PSET5. 28 00:01:40,560 --> 00:01:43,920 Mos harroni edhe pse, para se të kopje atë, për të siguruar që ju të kuptoni 29 00:01:43,920 --> 00:01:46,600 copy.c shumë tërësisht. 30 00:01:46,600 --> 00:01:47,620 OK. 31 00:01:47,620 --> 00:01:49,880 >> Pra, le të hapur një skedë. 32 00:01:49,880 --> 00:01:50,870 Ti e di se si ta bëjnë këtë. 33 00:01:50,870 --> 00:01:52,600 Unë jam duke shkuar për të lënë atë për ju. 34 00:01:52,600 --> 00:01:56,050 Tjetra, update informacion header për outfile. 35 00:01:56,050 --> 00:01:59,240 Sepse ne kemi një bitmap të re, ne kemi të reja info header. 36 00:01:59,240 --> 00:02:00,970 Çfarë ka ndryshuar këtu? 37 00:02:00,970 --> 00:02:06,000 E pra, madhësia e skedës do të ndryshojë sepse ne do të kemi më shumë 38 00:02:06,000 --> 00:02:07,900 piksele se më parë. 39 00:02:07,900 --> 00:02:11,060 Madhësia imazhit është, pra, edhe do të ndryshojë, pasi është 40 00:02:11,060 --> 00:02:13,050 gjerësia dhe lartësia. 41 00:02:13,050 --> 00:02:17,180 >> Pra cilat variablat janë ata, pikërisht? 42 00:02:17,180 --> 00:02:20,960 E pra, në qoftë se ju shikoni në kokë informacion, ju shihni nuk ka 43 00:02:20,960 --> 00:02:25,640 biSizeImage, e cila përfaqëson totalin Madhësia e imazhit në bytes, 44 00:02:25,640 --> 00:02:28,340 përfshirë pixels dhe mbushje. 45 00:02:28,340 --> 00:02:32,520 biWidth është gjerësia e imazhit në pixels, minus mbushje. 46 00:02:32,520 --> 00:02:35,580 biHeight është lartësia e imazhit në pixel. 47 00:02:35,580 --> 00:02:39,200 Dhe kështu ata që janë të përfshira në structs BITMAPFILEHEADER dhe 48 00:02:39,200 --> 00:02:40,390 BITMAPINFOHEADER. 49 00:02:40,390 --> 00:02:45,300 Ju mund të thoni se cilat një është e cila nga do të bmp.h dhe duke kërkuar në 50 00:02:45,300 --> 00:02:49,670 Struct BITMAPINFOHEADER dhe duke parë variablat të cilat janë të listuara atje. 51 00:02:49,670 --> 00:02:54,700 >> Pra, për të rinovuar header outfiles informacion, ju jeni do të duan të 52 00:02:54,700 --> 00:02:57,025 ndryshojë këto vlera të lartësi dhe gjerësi. 53 00:02:57,025 --> 00:03:00,570 Por, shanset janë, ju mund të kenë nevojë disa i header informacionit të infile-së 54 00:03:00,570 --> 00:03:03,670 më vonë, në mënyrë më të mirë për të mbajtur nën të dyja. 55 00:03:03,670 --> 00:03:07,770 Por të jetë shumë e qartë me ndryshore tuaj emra në mënyrë që ju nuk aksidentalisht 56 00:03:07,770 --> 00:03:12,490 shkruani vlerat pasakta në header për outfile. 57 00:03:12,490 --> 00:03:16,160 >> Pra, tani le të marrë për të lexuar në scanline pixel-nga-pixel. 58 00:03:16,160 --> 00:03:20,210 Përsëri, ne do të kthehet për të cilët ka besim tonë paraqesë I / O bibliotekë, dhe të kërkoni në 59 00:03:20,210 --> 00:03:22,100 funksioni fread. 60 00:03:22,100 --> 00:03:26,150 fread merr në një tregues për një struct që do të përmbajë bytes që 61 00:03:26,150 --> 00:03:30,130 jeni duke lexuar në, madhësia e secilit element që ju jeni duke e lexuar - 62 00:03:30,130 --> 00:03:34,410 përsëri, sizeof do të jenë të dobishme funksionojnë here, numri i 63 00:03:34,410 --> 00:03:38,820 elementet e madhësisë, madhësisë, që ju të jeni lexim in, dhe pastaj në fund, 64 00:03:38,820 --> 00:03:41,310 inpointer, fotografi që ju jeni duke lexuar nga. 65 00:03:41,310 --> 00:03:46,770 Pra, ju jeni duke marrë elemente numër e madhësisë nga inpointer, dhe 66 00:03:46,770 --> 00:03:49,040 vënien e tyre në të dhëna. 67 00:03:49,040 --> 00:03:51,695 >> Tani është koha për të resize horizontalisht. 68 00:03:51,695 --> 00:03:56,880 nëse n është e barabartë me 2, atëherë për çdo piksel në infile, ne jemi duke shkuar për të shkruar atë 69 00:03:56,880 --> 00:04:00,870 dy herë në outfile. 70 00:04:00,870 --> 00:04:02,210 Si e kemi shkruar fotografi? 71 00:04:02,210 --> 00:04:06,400 E pra, ne kemi funksionin fwrite, kështu ne kemi marrë kursorin në struct 72 00:04:06,400 --> 00:04:10,170 që përmban bytes që ju jeni shkrim nga, dhe pastaj ne të kalojë në 73 00:04:10,170 --> 00:04:14,430 madhësia, numri, dhe prodhimi, ku ju do të jeni të shkruar atë. 74 00:04:14,430 --> 00:04:19,200 Dhe pastaj për të përsëritur një proces, do të jetë gjendje një përsëritës të thjeshtë për lak. 75 00:04:19,200 --> 00:04:21,740 >> Por ne duhet të kujtojmë për të shtuar mbushje in 76 00:04:21,740 --> 00:04:26,040 Koncepti i mbushje është se, mirë, çdo piksel është tre kafshon, por 77 00:04:26,040 --> 00:04:28,940 Madhësia e çdo scanline mushtit të jetë një shumëfish i 4 bytes. 78 00:04:28,940 --> 00:04:33,660 Kështu nese numri i piksel nuk është një shumëfish i 4, ne duhet të shtoni disa 79 00:04:33,660 --> 00:04:36,630 mbushje, e cila është vetëm zero. 80 00:04:36,630 --> 00:04:42,130 Tani, ndryshe nga Kush Done It, dhe ndryshe nga kopje, atëherë imazhi infile dhe 81 00:04:42,130 --> 00:04:44,370 fotografi outfile kanë të ndryshme kanë mbushje e ndryshme, sepse ata janë 82 00:04:44,370 --> 00:04:46,360 widths të ndryshme. 83 00:04:46,360 --> 00:04:46,690 >> OK. 84 00:04:46,690 --> 00:04:51,050 Pra, ndoshta një formulë do të të jetë në dispozicion këtu. 85 00:04:51,050 --> 00:04:55,120 Unë do të lënë atë për ju për të gjetur atë, por ju them se, për të shkruar mbushje, 86 00:04:55,120 --> 00:04:59,360 mirë, kjo është vetëm një funksion të thjeshtë fputc, duke kaluar në karakter 87 00:04:59,360 --> 00:05:02,200 që ju dëshironi të shkruani, dhe pastaj file pointer që ju 88 00:05:02,200 --> 00:05:04,280 duan të shkruajnë për të. 89 00:05:04,280 --> 00:05:08,670 Pra, tani që ne kemi ridimensionuar horizontalisht, dhe pastaj të përdoren mbushje, 90 00:05:08,670 --> 00:05:12,030 mos harroni se ju keni nevojë për të lëvizur dosjen tuaj tregues pozicion, sepse ju 91 00:05:12,030 --> 00:05:14,480 nuk mund fread në mbushje. 92 00:05:14,480 --> 00:05:18,230 Pra, ju doni të bëni të sigurtë që dosja juaj tregues pozicion në infile 93 00:05:18,230 --> 00:05:19,980 është në pikën korrekte. 94 00:05:19,980 --> 00:05:23,970 Sepse ne gjithashtu duam të resize vertikalisht. 95 00:05:23,970 --> 00:05:27,090 Ne nuk mund të zgjas atë horizontalisht, sepse çdo nevojat rresht 96 00:05:27,090 --> 00:05:30,370 për të kopjohet herë n. 97 00:05:30,370 --> 00:05:33,050 >> Tani, ka disa të ndryshme mënyra për ta bërë këtë. 98 00:05:33,050 --> 00:05:39,010 Pra një, ne mund të përdorim një metodë rishkruaj, në që ne të kujtojmë të gjitha pixels 99 00:05:39,010 --> 00:05:42,840 e një rresht dhënë në një grup, dhe atëherë e kemi shkruar këtë koleksion si 100 00:05:42,840 --> 00:05:44,730 shumë herë si të nevojshme. 101 00:05:44,730 --> 00:05:49,530 Apo nuk ka metoda recopy ku, pas leximit në një rresht në infile 102 00:05:49,530 --> 00:05:53,530 dhe pastaj shkrim që në outfile, duke shtuar mbushje, ne fseek 103 00:05:53,530 --> 00:05:57,250 mbështetur në fillim të rreshtit origjinal, dhe pastaj të përsëritur horizontal 104 00:05:57,250 --> 00:05:58,710 duke ndryshuar nga atje. 105 00:05:58,710 --> 00:06:02,280 Pavarësisht nga metoda, edhe pse, ju do të duan çdo pixel që të përsëritet 106 00:06:02,280 --> 00:06:06,370 n herë, dhe çdo rresht të jetë përsëritet herë n si. 107 00:06:06,370 --> 00:06:09,160 >> Me këtë, ju do të keni bitmap më të mëdha se sa jeta. 108 00:06:09,160 --> 00:06:11,760 Emri im është Zamyla, dhe kjo është CS50. 109 00:06:11,760 --> 00:06:19,542