1 00:00:00,000 --> 00:00:10,210 >> [Music kucheza] 2 00:00:10,210 --> 00:00:13,320 >> ZAMYLA CHAN: Hebu pigo mambo ya juu na resize. 3 00:00:13,320 --> 00:00:17,710 Katika resize, user itapita katika, kupitia mstari amri, bitmap picha kwamba 4 00:00:17,710 --> 00:00:21,860 wanataka kuongeza kwa idadi kwamba wao pia kupita katika, 5 00:00:21,860 --> 00:00:23,770 katika mstari amri. 6 00:00:23,770 --> 00:00:24,690 Jinsi gani tunafanya hivi? 7 00:00:24,690 --> 00:00:28,270 >> Naam, mambo ya kwanza ya kwanza, hebu kuvunja chini katika hatua. 8 00:00:28,270 --> 00:00:31,510 Wewe ni kwenda unataka kufungua infile kwamba wao kukupa, kama vile 9 00:00:31,510 --> 00:00:35,560 kujenga na kufungua outfile kwamba wewe ni kwenda kuweka 10 00:00:35,560 --> 00:00:38,020 resized picha in 11 00:00:38,020 --> 00:00:42,050 Basi, kwa sababu wewe ni resizing, na kwa sababu ni bitmap, ni header, hivyo 12 00:00:42,050 --> 00:00:46,080 utaenda pia update header habari kwa ajili ya outfile, 13 00:00:46,080 --> 00:00:47,950 na kuandika kwamba in 14 00:00:47,950 --> 00:00:51,850 Basi, wewe ni kwenda kusoma katika scanline ya infile, 15 00:00:51,850 --> 00:00:56,890 pixel-na-pixel, resizing usawa na kuandika saizi wale katika 16 00:00:56,890 --> 00:01:00,910 outfile, kama maalum na mtumiaji wadogo. 17 00:01:00,910 --> 00:01:03,940 >> Wewe ni kwenda kukumbuka kuongeza padding kama ni muhimu. 18 00:01:03,940 --> 00:01:05,400 Zaidi juu ya baadaye. 19 00:01:05,400 --> 00:01:07,790 Na kisha, pia resize wima. 20 00:01:07,790 --> 00:01:08,890 OK. 21 00:01:08,890 --> 00:01:13,280 Hivyo hii ni kwenda kuwa kidogo zaidi ngumu zaidi ya nani kufanya jambo hilo, lakini 22 00:01:13,280 --> 00:01:18,310 nini sawa ni kwamba copy.c mapenzi, tena, kuthibitisha muhimu sana. 23 00:01:18,310 --> 00:01:23,160 Kumbuka kwamba copy.c kufungua faili, updates header habari kwa ajili ya 24 00:01:23,160 --> 00:01:28,250 outfile, basi wasomaji katika scanline, pixel-na-pixel, kuandika kila pixel 25 00:01:28,250 --> 00:01:30,510 katika pato faili scanline. 26 00:01:30,510 --> 00:01:37,040 >> Hivyo tena, hatua yako ya kwanza nguvu pengine kuwa na linganisha, copy.c, resize.c 27 00:01:37,040 --> 00:01:40,560 ndani ya PSET5 saraka yako. 28 00:01:40,560 --> 00:01:43,920 Kumbuka ingawa, kabla ya nakala yake, kuhakikisha kwamba kuelewa 29 00:01:43,920 --> 00:01:46,600 copy.c vyema. 30 00:01:46,600 --> 00:01:47,620 OK. 31 00:01:47,620 --> 00:01:49,880 >> Basi hebu kufungua faili. 32 00:01:49,880 --> 00:01:50,870 Unajua jinsi ya kufanya hivyo. 33 00:01:50,870 --> 00:01:52,600 Mimi naenda kuondoka hivyo na wewe. 34 00:01:52,600 --> 00:01:56,050 Next, update header habari kwa outfile. 35 00:01:56,050 --> 00:01:59,240 Kwa sababu tuna bitmap mpya, tuna mpya header info. 36 00:01:59,240 --> 00:02:00,970 Nini kubadilisha hapa? 37 00:02:00,970 --> 00:02:06,000 Naam, faili ni kwenda na mabadiliko kwa sababu tunakwenda na zaidi 38 00:02:06,000 --> 00:02:07,900 saizi kuliko hapo kabla. 39 00:02:07,900 --> 00:02:11,060 ukubwa picha, hivyo, pia kwenda na mabadiliko, kama ni 40 00:02:11,060 --> 00:02:13,050 upana na urefu. 41 00:02:13,050 --> 00:02:17,180 >> Hivyo ambayo vigezo ni wale, hasa? 42 00:02:17,180 --> 00:02:20,960 Naam, kama ukiangalia katika header habari, unaweza kuona kuna 43 00:02:20,960 --> 00:02:25,640 biSizeImage, ambayo inawakilisha jumla ukubwa wa picha katika ka, 44 00:02:25,640 --> 00:02:28,340 ikiwa ni pamoja na saizi na padding. 45 00:02:28,340 --> 00:02:32,520 biWidth ni upana wa picha katika saizi, minus padding. 46 00:02:32,520 --> 00:02:35,580 biHeight ni urefu wa picha katika saizi. 47 00:02:35,580 --> 00:02:39,200 Na hivyo wale zilizomo katika structs BITMAPFILEHEADER na 48 00:02:39,200 --> 00:02:40,390 BITMAPINFOHEADER. 49 00:02:40,390 --> 00:02:45,300 Unaweza kuwaambia ambayo ni moja ambayo na kwenda bmp.h na kuangalia 50 00:02:45,300 --> 00:02:49,670 BITMAPINFOHEADER struct na kuona ambayo vigezo ni waliotajwa huko. 51 00:02:49,670 --> 00:02:54,700 >> Hivyo update header outfiles habari, wewe ni atataka 52 00:02:54,700 --> 00:02:57,025 kubadili maadili wale wa urefu na upana. 53 00:02:57,025 --> 00:03:00,570 Lakini nafasi ni, unaweza haja ya baadhi ya ya infile ya header habari 54 00:03:00,570 --> 00:03:03,670 baadaye, hivyo bora kwa kuweka wimbo wa wote. 55 00:03:03,670 --> 00:03:07,770 Lakini kuwa wazi sana na kutofautiana yako majina ili kufanya si ajali 56 00:03:07,770 --> 00:03:12,490 kuandika maadili sahihi katika header kwa outfile. 57 00:03:12,490 --> 00:03:16,160 >> Hivyo sasa hebu kupata kusoma katika scanline pixel-na-pixel. 58 00:03:16,160 --> 00:03:20,210 Tena, tunakwenda kurejea kwa muaminifu wetu faili I / O maktaba, na kuangalia 59 00:03:20,210 --> 00:03:22,100 kazi fread. 60 00:03:22,100 --> 00:03:26,150 fread inachukua katika pointer kwa struct ambayo yana ka kwamba 61 00:03:26,150 --> 00:03:30,130 wewe ni kusoma katika, ukubwa wa kila hiki kwamba wewe ni kusoma - 62 00:03:30,130 --> 00:03:34,410 tena, sizeof ni kwenda kuwa na manufaa kazi hapa, idadi ya 63 00:03:34,410 --> 00:03:38,820 mambo ya kawaida, ukubwa, kwamba wewe ni kusoma, na kisha hatimaye, 64 00:03:38,820 --> 00:03:41,310 inpointer, faili kwamba wewe ni kusoma kutoka. 65 00:03:41,310 --> 00:03:46,770 Hivyo wewe ni kuchukua vipengele namba ya kawaida kutoka inpointer, na 66 00:03:46,770 --> 00:03:49,040 kuweka katika data. 67 00:03:49,040 --> 00:03:51,695 >> Sasa ni wakati wa resize usawa. 68 00:03:51,695 --> 00:03:56,880 kama n sawa na 2, kisha kwa kila pixel katika infile, tunakwenda kuandika 69 00:03:56,880 --> 00:04:00,870 mara mbili katika outfile. 70 00:04:00,870 --> 00:04:02,210 Je, sisi kuandika files? 71 00:04:02,210 --> 00:04:06,400 Naam, tuna kazi fwrite, hivyo tumekuwa kuchukuliwa pointer kwa struct 72 00:04:06,400 --> 00:04:10,170 ambayo ina ka kwamba wewe ni kuandika kutoka, na kisha sisi kupita katika 73 00:04:10,170 --> 00:04:14,430 kawaida, idadi, na pato, ambapo wewe ni kwenda kuwa kuandika hiyo. 74 00:04:14,430 --> 00:04:19,200 Na kisha kurudia utaratibu, itakuwa uwezo iterative rahisi kwa kitanzi. 75 00:04:19,200 --> 00:04:21,740 >> Lakini tunahitaji kukumbuka kuongeza padding in 76 00:04:21,740 --> 00:04:26,040 dhana ya padding ni kwamba, vizuri, kila pixel ni kuumwa tatu, lakini 77 00:04:26,040 --> 00:04:28,940 ukubwa wa kila lazima scanline kuwa nyingi ya 4 ka. 78 00:04:28,940 --> 00:04:33,660 Hivyo kama idadi ya saizi ni si mbalimbali ya 4, tunahitaji kuongeza baadhi 79 00:04:33,660 --> 00:04:36,630 padding, ambayo ni zeroes tu. 80 00:04:36,630 --> 00:04:42,130 Sasa, tofauti na nani kufanya jambo hilo, na tofauti na nakala, kisha infile picha na 81 00:04:42,130 --> 00:04:44,370 outfile file kuwa tofauti na padding mbalimbali kwa sababu wao ni 82 00:04:44,370 --> 00:04:46,360 widths mbalimbali. 83 00:04:46,360 --> 00:04:46,690 >> OK. 84 00:04:46,690 --> 00:04:51,050 Hivyo labda formula ingekuwa kuja katika Handy hapa. 85 00:04:51,050 --> 00:04:55,120 Mimi itabidi kuondoka kwa wewe kupata nje, lakini kuwaambia kwamba, kuandika padding, 86 00:04:55,120 --> 00:04:59,360 vizuri, ni rahisi tu fputc kazi, kupita katika tabia ya 87 00:04:59,360 --> 00:05:02,200 kwamba unataka kuandika, na kisha file pointer kwamba 88 00:05:02,200 --> 00:05:04,280 unataka kuandika kwa. 89 00:05:04,280 --> 00:05:08,670 Hivyo sasa kwamba tumekuwa resized usawa, na kisha kutumika padding, 90 00:05:08,670 --> 00:05:12,030 kukumbuka kwamba unahitaji hoja faili yako nafasi kiashiria, kwa sababu wewe 91 00:05:12,030 --> 00:05:14,480 hawezi fread katika padding. 92 00:05:14,480 --> 00:05:18,230 Kwa hiyo unataka kuhakikisha kwamba faili yako nafasi kiashiria katika infile 93 00:05:18,230 --> 00:05:19,980 ni katika hatua sahihi. 94 00:05:19,980 --> 00:05:23,970 Kwa sababu sisi pia wanataka resize wima. 95 00:05:23,970 --> 00:05:27,090 Hatuwezi tu kunyoosha usawa, kwa sababu mahitaji ya kila mstari 96 00:05:27,090 --> 00:05:30,370 kunakiliwa mara n. 97 00:05:30,370 --> 00:05:33,050 >> Sasa, kuna mbalimbali njia za kufanya hivyo. 98 00:05:33,050 --> 00:05:39,010 Hivyo moja, tunaweza kutumia njia rewrite, katika kwamba sisi kukumbuka yote ya saizi 99 00:05:39,010 --> 00:05:42,840 ya kupewa mfululizo katika safu, na kisha sisi kuandika kwamba safu kama 100 00:05:42,840 --> 00:05:44,730 mara nyingi kama inahitajika. 101 00:05:44,730 --> 00:05:49,530 Au kuna njia recopy ambapo, baada ya kusoma katika mstari mmoja katika infile 102 00:05:49,530 --> 00:05:53,530 na kisha kuandika kwamba ndani ya outfile, kuongeza padding, sisi fseek 103 00:05:53,530 --> 00:05:57,250 nyuma ya kuanza kwa mstari awali, na kisha kurudia usawa 104 00:05:57,250 --> 00:05:58,710 resizing kutoka huko. 105 00:05:58,710 --> 00:06:02,280 Bila kujali njia, ingawa, wewe utakuwa nataka kila pixel kuwa mara kwa mara 106 00:06:02,280 --> 00:06:06,370 n mara kwa mara, na kila mstari kuwa mara kwa mara mara n pia. 107 00:06:06,370 --> 00:06:09,160 >> Pamoja na kwamba, itabidi bitmap kubwa kuliko maisha. 108 00:06:09,160 --> 00:06:11,760 Jina langu ni Zamyla, na hii ni CS50. 109 00:06:11,760 --> 00:06:19,542