[Music kucheza] ZAMYLA CHAN: Hebu pigo mambo ya juu na resize. Katika resize, user itapita katika, kupitia mstari amri, bitmap picha kwamba wanataka kuongeza kwa idadi kwamba wao pia kupita katika, katika mstari amri. Jinsi gani tunafanya hivi? Naam, mambo ya kwanza ya kwanza, hebu kuvunja chini katika hatua. Wewe ni kwenda unataka kufungua infile kwamba wao kukupa, kama vile kujenga na kufungua outfile kwamba wewe ni kwenda kuweka resized picha in Basi, kwa sababu wewe ni resizing, na kwa sababu ni bitmap, ni header, hivyo utaenda pia update header habari kwa ajili ya outfile, na kuandika kwamba in Basi, wewe ni kwenda kusoma katika scanline ya infile, pixel-na-pixel, resizing usawa na kuandika saizi wale katika outfile, kama maalum na mtumiaji wadogo. Wewe ni kwenda kukumbuka kuongeza padding kama ni muhimu. Zaidi juu ya baadaye. Na kisha, pia resize wima. OK. Hivyo hii ni kwenda kuwa kidogo zaidi ngumu zaidi ya nani kufanya jambo hilo, lakini nini sawa ni kwamba copy.c mapenzi, tena, kuthibitisha muhimu sana. Kumbuka kwamba copy.c kufungua faili, updates header habari kwa ajili ya outfile, basi wasomaji katika scanline, pixel-na-pixel, kuandika kila pixel katika pato faili scanline. Hivyo tena, hatua yako ya kwanza nguvu pengine kuwa na linganisha, copy.c, resize.c ndani ya PSET5 saraka yako. Kumbuka ingawa, kabla ya nakala yake, kuhakikisha kwamba kuelewa copy.c vyema. OK. Basi hebu kufungua faili. Unajua jinsi ya kufanya hivyo. Mimi naenda kuondoka hivyo na wewe. Next, update header habari kwa outfile. Kwa sababu tuna bitmap mpya, tuna mpya header info. Nini kubadilisha hapa? Naam, faili ni kwenda na mabadiliko kwa sababu tunakwenda na zaidi saizi kuliko hapo kabla. ukubwa picha, hivyo, pia kwenda na mabadiliko, kama ni upana na urefu. Hivyo ambayo vigezo ni wale, hasa? Naam, kama ukiangalia katika header habari, unaweza kuona kuna biSizeImage, ambayo inawakilisha jumla ukubwa wa picha katika ka, ikiwa ni pamoja na saizi na padding. biWidth ni upana wa picha katika saizi, minus padding. biHeight ni urefu wa picha katika saizi. Na hivyo wale zilizomo katika structs BITMAPFILEHEADER na BITMAPINFOHEADER. Unaweza kuwaambia ambayo ni moja ambayo na kwenda bmp.h na kuangalia BITMAPINFOHEADER struct na kuona ambayo vigezo ni waliotajwa huko. Hivyo update header outfiles habari, wewe ni atataka kubadili maadili wale wa urefu na upana. Lakini nafasi ni, unaweza haja ya baadhi ya ya infile ya header habari baadaye, hivyo bora kwa kuweka wimbo wa wote. Lakini kuwa wazi sana na kutofautiana yako majina ili kufanya si ajali kuandika maadili sahihi katika header kwa outfile. Hivyo sasa hebu kupata kusoma katika scanline pixel-na-pixel. Tena, tunakwenda kurejea kwa muaminifu wetu faili I / O maktaba, na kuangalia kazi fread. fread inachukua katika pointer kwa struct ambayo yana ka kwamba wewe ni kusoma katika, ukubwa wa kila hiki kwamba wewe ni kusoma - tena, sizeof ni kwenda kuwa na manufaa kazi hapa, idadi ya mambo ya kawaida, ukubwa, kwamba wewe ni kusoma, na kisha hatimaye, inpointer, faili kwamba wewe ni kusoma kutoka. Hivyo wewe ni kuchukua vipengele namba ya kawaida kutoka inpointer, na kuweka katika data. Sasa ni wakati wa resize usawa. kama n sawa na 2, kisha kwa kila pixel katika infile, tunakwenda kuandika mara mbili katika outfile. Je, sisi kuandika files? Naam, tuna kazi fwrite, hivyo tumekuwa kuchukuliwa pointer kwa struct ambayo ina ka kwamba wewe ni kuandika kutoka, na kisha sisi kupita katika kawaida, idadi, na pato, ambapo wewe ni kwenda kuwa kuandika hiyo. Na kisha kurudia utaratibu, itakuwa uwezo iterative rahisi kwa kitanzi. Lakini tunahitaji kukumbuka kuongeza padding in dhana ya padding ni kwamba, vizuri, kila pixel ni kuumwa tatu, lakini ukubwa wa kila lazima scanline kuwa nyingi ya 4 ka. Hivyo kama idadi ya saizi ni si mbalimbali ya 4, tunahitaji kuongeza baadhi padding, ambayo ni zeroes tu. Sasa, tofauti na nani kufanya jambo hilo, na tofauti na nakala, kisha infile picha na outfile file kuwa tofauti na padding mbalimbali kwa sababu wao ni widths mbalimbali. OK. Hivyo labda formula ingekuwa kuja katika Handy hapa. Mimi itabidi kuondoka kwa wewe kupata nje, lakini kuwaambia kwamba, kuandika padding, vizuri, ni rahisi tu fputc kazi, kupita katika tabia ya kwamba unataka kuandika, na kisha file pointer kwamba unataka kuandika kwa. Hivyo sasa kwamba tumekuwa resized usawa, na kisha kutumika padding, kukumbuka kwamba unahitaji hoja faili yako nafasi kiashiria, kwa sababu wewe hawezi fread katika padding. Kwa hiyo unataka kuhakikisha kwamba faili yako nafasi kiashiria katika infile ni katika hatua sahihi. Kwa sababu sisi pia wanataka resize wima. Hatuwezi tu kunyoosha usawa, kwa sababu mahitaji ya kila mstari kunakiliwa mara n. Sasa, kuna mbalimbali njia za kufanya hivyo. Hivyo moja, tunaweza kutumia njia rewrite, katika kwamba sisi kukumbuka yote ya saizi ya kupewa mfululizo katika safu, na kisha sisi kuandika kwamba safu kama mara nyingi kama inahitajika. Au kuna njia recopy ambapo, baada ya kusoma katika mstari mmoja katika infile na kisha kuandika kwamba ndani ya outfile, kuongeza padding, sisi fseek nyuma ya kuanza kwa mstari awali, na kisha kurudia usawa resizing kutoka huko. Bila kujali njia, ingawa, wewe utakuwa nataka kila pixel kuwa mara kwa mara n mara kwa mara, na kila mstari kuwa mara kwa mara mara n pia. Pamoja na kwamba, itabidi bitmap kubwa kuliko maisha. Jina langu ni Zamyla, na hii ni CS50.