[Mūzikas atskaņošanai] ZAMYLA Chan: Let 's trieciens lietas, līdz ar izmērus. In izmērus, lietotājs pāriet, izmantojot komandrindas, bitmap attēlu, kas viņi vēlas, lai jūs mēroga ar numuru ka tie arī pāriet, komandrindas. Kā mēs to darām? Nu, pirmkārt lietas, pirmkārt, pieņemsim lauzt šo leju posmos. Jūs gatavojas vēlaties, lai atvērtu INFILE ka tie dod jums, kā arī izveidot un atvērt outfile ka jūs gatavojas īstenot mainīti attēlu iekšā Tad, jo jūs esat izmēru maiņas, un jo tas ir bitkarte, tā header, tāpēc jūs gatavojas arī atjaunināt galveni Informācija par OUTFILE, un rakstīt, ka iekšā Tad jūs gatavojaties izlasīt par scanline no INFILE, pixel-by-pikseļu, izmēru horizontāli un rakstot šos pikseļus uz outfile, kā norādīts ar lietotāja skalas. Jūs gatavojas atcerēties pievienot polsterējums, ja nepieciešams. Vairāk par šo vēlāk. Un tad arī mainīt vertikāli. OK. Tātad šis būs mazliet vairāk sarežģītāka, nekā Kas izdarīts, bet kas ir līdzīgs, ka copy.c būs, atkal izrādīties ļoti noderīga. Atcerieties, ka copy.c atver failu, aktualizē galvenes informāciju outfile, tad skan uz scanline, pixel-by-pikseļu, rakstot katru pikseli uz izejas faila scanline. Tātad vēlreiz, jūsu pirmais solis varētu droši jābūt KP, copy.c, resize.c savā PSET5 direktorijā. Atcerieties, lai gan, pirms jūs kopēt to, lai pārliecinātos, ka jūs saprotat Ļoti rūpīgi copy.c. OK. Tā ļauj atvērt failu. Jūs zināt, kā to izdarīt. Es esmu gatavojas atstāt, ka jums. Nākamais, atjaunināt galvenes informāciju par OUTFILE. Tāpēc, ka mums ir jauns bitmap, mums ir jauna galvenes info. Kas mainās šeit? Nu, faila izmērs mainīsies tāpēc, ka mēs ejam, lai būtu vairāk pikseļu nekā pirms tam. Attēla izmērs ir, līdz ar to arī mainīsies, jo ir platums un augstums. Tātad, kas mainīgie ir tie, kas precīzi? Nu, ja paskatās uz galveni informāciju, jūs redzat, ka ir biSizeImage, kas atspoguļo kopējo attēla baitos lielums, ieskaitot pikseļiem un polsterējumu. biWidth ir platums attēla pikseļos, mīnus polsterējums. biHeight ir augstums attēls pikseļos. Un tāpēc tie ir ietverti structs BITMAPFILEHEADER un BITMAPINFOHEADER. Jūs varat pateikt, kura no tām ir kas pēc dodas uz bmp.h un meklē BITMAPINFOHEADER struktūrai un redzēt kas mainīgie ir uzskaitītas. Tātad, lai atjauninātu outfiles galveni informāciju, jūs gatavojas vēlaties mainīt šos vērtības augstumu un platumu. Bet izredzes ir, jums var būt nepieciešams zināms no inFile ir galvenes informāciju vēlāk, tāpēc vislabāk ir sekot abiem. Bet ir ļoti skaidrs, ar savu mainīgo vārdus, lai jums nav nejauši rakstīt nepareizas vērtības header par OUTFILE. Tātad tagad pieņemsim nokļūt izlasīšanu scanline pikseļu pa pikseļu. Atkal, mēs spēsim pārvērst mūsu uzticamo failu I / O bibliotēka, un apskatīt fread funkcija. fread notiek ar rādītāju uz struct kas satur baiti, kas jūs lasījumā, lielums katras elements, ka jūs lasāt - atkal, sizeof būs noderīga darboties šeit, skaits elementi lieluma, lielums, kas tu esi lasīšanu, un visbeidzot, inpointer, failu, jūs lasāt no. Tātad jūs lietojat skaits elementus izmēru no inpointer, un liekot tos datus. Tagad ir pienācis laiks, lai mainītu horizontāli. ja n ir vienāds ar 2, tad katram pikselim infile, mēs ejam, lai rakstīt divreiz OUTFILE. Kā mēs rakstīt failus? Nu, mums ir fwrite funkciju, lai Mēs esam veikuši rādītāju uz struct kas satur baiti, kas jūs esat rakstiski, un pēc tam mēs caurlaide izmērs, numuru, un izejas, kur jūs esat būs rakstiski to. Un pēc tam atkārtojiet procesu, būs iespēja vienkārši atkārtotais par cilpu. Bet mums ir jāatceras pievienot polsterējums collas Polsterējumu koncepcija ir tāda, ka, labi, katram pikselim ir trīs kodumi, bet lielums katra scanline misas jābūt dalās ar 4 baiti. Tātad, ja pikseļu skaits nav dalās ar 4, mums ir nepieciešams pievienot dažas polsterējums, kas ir tikai nulles. Tagad, atšķirībā Kas darījuši to, un atšķirībā kopēt, tad infile attēlu un outfile fails ir atšķirīgs, ir atšķirīga polsterējums tāpēc, ka viņi dažādu platumu. OK. Tāpēc varbūt formula būtu noderēs šeit. Es atstāt to jums, lai atrastu to ārā, bet pateiks, ka, lai uzrakstītu polsterējums, labi, tas ir tikai vienkāršs fputc funkcija, iet raksturā ka jūs vēlaties rakstīt, un pēc tam failu rādītājs, ka jūs vēlas rakstīt. Tāpēc tagad, ka mēs esam mainīti horizontāli, un pēc tam izmanto polsterējums, atcerieties, ka jums ir nepieciešams, lai pārvietotu failu stāvokļa indikators, jo jums nevar fread uz polsterējumu. Tātad jūs vēlaties, lai pārliecinātos, ka jūsu fails pozīcijas rādītājs INFILE atrodas pareizā punktā. Jo mēs arī vēlamies, lai izmērus vertikāli. Mēs nevaram vienkārši stiept to horizontāli, jo katru rindu vajadzībām kopēt n reizes. Tagad tur ir vairākas atšķirīgas veidi, kā to izdarīt. Tātad viens, mēs varam izmantot pārrakstīt metodi, kas ka atceramies visi pikseļi gada dots rindu masīvā, un Tad mēs rakstām, ka masīvs kā daudz reižu, cik nepieciešams. Vai tur ir recopy metode, kurā, izlasot vienā rindā ar INFILE un tad rakstiski, ka uz OUTFILE, pievienojot polsterējums, mēs fseek atpakaļ uz sākumu sākotnējā rindā, un tad atkārtojiet horizontālā izmēru no turienes. Neatkarīgi no metodes, lai gan, jūs vēlamies katru pikseli ir jāatkārto n reizes, un katrā rindā, lai būtu atkārto n reizes, kā arī. Ar to, ka jums ir bitmap lielāks nekā dzīve. Mans vārds ir Zamyla, un tas ir CS50.