[MUSIC Playing] ZAMYLA CHAN: goditje Le gjërat deri me resize. Në resize, përdoruesi do të kalojë në, nëpërmjet command line, një imazh bitmap që ata duan që ju të shkallë nga një numër që edhe ata të kalojnë në, në vijën komanduese. Si e bëjmë këtë? E pra, gjërat e para e para, le të të thyer këtë poshtë në hapa. Ju jeni do të duan për të hapur infile që të japë, si dhe të krijojë dhe të hapur outfile që ju do të jeni për të vënë image ndryshohet madhësia in Pastaj, për shkak se ju jeni duke ndryshuar, dhe të sepse kjo është një bitmap, atë një header, kështu ju do të jeni për të rinovuar header Informata për outfile, dhe shkruajnë se in Pastaj, ju do të jeni për të lexuar në scanline i infile, pixel-nga-piksel, duke ndryshuar horizontalisht dhe shkrim ato piksele në outfile, siç është specifikuar nga shkallë të përdoruesit. Ju jeni do të mbani mend që të shtoni mbushje sipas nevojës. Më shumë për këtë më vonë. Dhe pastaj, edhe resize vertikalisht. OK. Pra, kjo do të jetë pak më shumë komplikuar se Kush Done It, por çfarë është e ngjashme është se copy.c do, përsëri, të provojë shumë i dobishëm. Mos harroni se copy.c hap një dosje, azhurnon informacionin header për outfile, pastaj lexon në scanline, pixel-nga-piksel, duke shkruar çdo piksel në scanline e prodhimit file-së. Pra, përsëri, hapi juaj i parë mund ndoshta të jetë në krah, copy.c, resize.c në directory tuaj PSET5. Mos harroni edhe pse, para se të kopje atë, për të siguruar që ju të kuptoni copy.c shumë tërësisht. OK. Pra, le të hapur një skedë. Ti e di se si ta bëjnë këtë. Unë jam duke shkuar për të lënë atë për ju. Tjetra, update informacion header për outfile. Sepse ne kemi një bitmap të re, ne kemi të reja info header. Çfarë ka ndryshuar këtu? E pra, madhësia e skedës do të ndryshojë sepse ne do të kemi më shumë piksele se më parë. Madhësia imazhit është, pra, edhe do të ndryshojë, pasi është gjerësia dhe lartësia. Pra cilat variablat janë ata, pikërisht? E pra, në qoftë se ju shikoni në kokë informacion, ju shihni nuk ka biSizeImage, e cila përfaqëson totalin Madhësia e imazhit në bytes, përfshirë pixels dhe mbushje. biWidth është gjerësia e imazhit në pixels, minus mbushje. biHeight është lartësia e imazhit në pixel. Dhe kështu ata që janë të përfshira në structs BITMAPFILEHEADER dhe BITMAPINFOHEADER. Ju mund të thoni se cilat një është e cila nga do të bmp.h dhe duke kërkuar në Struct BITMAPINFOHEADER dhe duke parë variablat të cilat janë të listuara atje. Pra, për të rinovuar header outfiles informacion, ju jeni do të duan të ndryshojë këto vlera të lartësi dhe gjerësi. Por, shanset janë, ju mund të kenë nevojë disa i header informacionit të infile-së më vonë, në mënyrë më të mirë për të mbajtur nën të dyja. Por të jetë shumë e qartë me ndryshore tuaj emra në mënyrë që ju nuk aksidentalisht shkruani vlerat pasakta në header për outfile. Pra, tani le të marrë për të lexuar në scanline pixel-nga-pixel. Përsëri, ne do të kthehet për të cilët ka besim tonë paraqesë I / O bibliotekë, dhe të kërkoni në funksioni fread. fread merr në një tregues për një struct që do të përmbajë bytes që jeni duke lexuar në, madhësia e secilit element që ju jeni duke e lexuar - përsëri, sizeof do të jenë të dobishme funksionojnë here, numri i elementet e madhësisë, madhësisë, që ju të jeni lexim in, dhe pastaj në fund, inpointer, fotografi që ju jeni duke lexuar nga. Pra, ju jeni duke marrë elemente numër e madhësisë nga inpointer, dhe vënien e tyre në të dhëna. Tani është koha për të resize horizontalisht. 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ë dy herë në outfile. Si e kemi shkruar fotografi? E pra, ne kemi funksionin fwrite, kështu ne kemi marrë kursorin në struct që përmban bytes që ju jeni shkrim nga, dhe pastaj ne të kalojë në madhësia, numri, dhe prodhimi, ku ju do të jeni të shkruar atë. Dhe pastaj për të përsëritur një proces, do të jetë gjendje një përsëritës të thjeshtë për lak. Por ne duhet të kujtojmë për të shtuar mbushje in Koncepti i mbushje është se, mirë, çdo piksel është tre kafshon, por Madhësia e çdo scanline mushtit të jetë një shumëfish i 4 bytes. Kështu nese numri i piksel nuk është një shumëfish i 4, ne duhet të shtoni disa mbushje, e cila është vetëm zero. Tani, ndryshe nga Kush Done It, dhe ndryshe nga kopje, atëherë imazhi infile dhe fotografi outfile kanë të ndryshme kanë mbushje e ndryshme, sepse ata janë widths të ndryshme. OK. Pra, ndoshta një formulë do të të jetë në dispozicion këtu. Unë do të lënë atë për ju për të gjetur atë, por ju them se, për të shkruar mbushje, mirë, kjo është vetëm një funksion të thjeshtë fputc, duke kaluar në karakter që ju dëshironi të shkruani, dhe pastaj file pointer që ju duan të shkruajnë për të. Pra, tani që ne kemi ridimensionuar horizontalisht, dhe pastaj të përdoren mbushje, mos harroni se ju keni nevojë për të lëvizur dosjen tuaj tregues pozicion, sepse ju nuk mund fread në mbushje. Pra, ju doni të bëni të sigurtë që dosja juaj tregues pozicion në infile është në pikën korrekte. Sepse ne gjithashtu duam të resize vertikalisht. Ne nuk mund të zgjas atë horizontalisht, sepse çdo nevojat rresht për të kopjohet herë n. Tani, ka disa të ndryshme mënyra për ta bërë këtë. Pra një, ne mund të përdorim një metodë rishkruaj, në që ne të kujtojmë të gjitha pixels e një rresht dhënë në një grup, dhe atëherë e kemi shkruar këtë koleksion si shumë herë si të nevojshme. Apo nuk ka metoda recopy ku, pas leximit në një rresht në infile dhe pastaj shkrim që në outfile, duke shtuar mbushje, ne fseek mbështetur në fillim të rreshtit origjinal, dhe pastaj të përsëritur horizontal duke ndryshuar nga atje. Pavarësisht nga metoda, edhe pse, ju do të duan çdo pixel që të përsëritet n herë, dhe çdo rresht të jetë përsëritet herë n si. Me këtë, ju do të keni bitmap më të mëdha se sa jeta. Emri im është Zamyla, dhe kjo është CS50.