[MIZIK jwe] ZAMYLA Chan: souflèt Annou bagay sa yo moute ak rdimansyonman. Nan rdimansyonman, itilizatè a ap pase nan, atravè liy lan lòd, yon imaj bitmap ki yo vle ou selon echèl la pa yon kantite pou yo menm tou pase nan, nan liy lan lòd. Ki jan nou fè sa? Oke, premye bagay sa yo an premye, kite a kraze sa a desann nan etap. W ap ale nan vle louvri infile la yo ke yo ba ou, menm jan tou kreye epi louvri outfile a ki w ap ale nan mete nan rdimansyone imaj pous Lè sa a, paske w ap rèsizin, ak paske li nan yon bitmap, li yon header, se konsa w ap ale nan tou mete header a enfòmasyon pou outfile a, epi ekri ki pous Lè sa a, w ap ale nan li nan scanline a nan infile a, pixel-pa-pixel, rèsizin orizontal ak ekri sa yo piksèl nan la outfile, jan sa espesifye pa echèl itilizatè a la. W ap ale nan sonje ajoute padding si sa nesesè. Plis sou sa pita. Lè sa a,, tou rdimansyonman vètikal. OK. Se konsa, sa a ki pral gen yon ti kras pi plis konplike pase Ki moun ki fè l ', men sa ki nan sanble, se paske copy.c pral, ankò, pwouve trè itil. Sonje ke copy.c louvri yon dosye, Mizajou nan enfòmasyon yo nan header pou la outfile, lè sa a li nan scanline a, pixel-pa-pixel, ekri chak pixel nan scanline dosye a pwodiksyon an. Se konsa, ankò, premye etap ou ka pwobableman dwe CP, copy.c, resize.c nan anyè PSET5 ou. Sonje menm si, anvan ou kopi li, a asire w ke ou konprann copy.c trè byen. OK. Se konsa, kite a louvri yon dosye. Ou konnen ki jan yo fè sa. Mwen pral kite sa gade ou. Apre sa, mete ajou enfòmasyon an header pou outfile la. Paske nou gen yon nouvo bitmap, nou gen nouvo enfòmasyon header. Ki sa ki chanje isit la? Oke, gwosè a dosye ki pral chanje paske nou ap ale nan gen plis piksèl pase anvan. Gwosè a imaj se, konsa, tou pral chanje, kòm se nan lajè ak wotè la. Se konsa, ki varyab moun sa yo ki, egzakteman? Byen, si w gade nan header a enfòmasyon, ou wè gen biSizeImage, ki reprezante manm nan gwosè nan imaj la nan bytes, ki gen ladan piksèl ak pwotèj. biWidth se lajè a nan imaj la nan piksèl, mwens padding la. biHeight se wotè a nan imaj la nan piksèl. Se konsa, sa yo genyen nan yo nan la strukt BITMAPFILEHEADER ak BITMAPINFOHEADER. Ou ka di ki se yon sèl ki pa ale nan bmp.h ak gade nan nan Konstri BITMAPINFOHEADER ak wè ki varyab yo ki nan lis la. Se konsa, yo mete header nan outfiles enfòmasyon, w ap ale nan vle chanje valè sa yo nan la wotè ak lajè li an. Men, chans yo se, ou ta ka bezwen kèk nan enfòmasyon header infile la pita, se konsa pi bon yo kenbe tras nan tou de. Men ou dwe trè klè ak varyab ou non pou ke ou pa fè sa aksidantèlman ekri valè yo kòrèk nan header a pou outfile la. Se konsa, kounye a kite a jwenn li nan scanline pixel nan-pa-pixel. Yon fwa ankò, nou pral tounen vin jwenn konfyans nou ranpli I O bibliyotèk /, ak gade nan fonksyon an frèd. frèd pran nan yon konsèy nan yon konstri ki pral gen bytes yo ki w ap li nan, gwosè a nan chak eleman ke w ap lekti - ankò, sizof a pwal itil fonksyone isit la, ki kantite a eleman nan gwosè, gwosè li, ke w ap lekti nan, ak Lè sa a, finalman, an inpointer, dosye a ki w ap li nan. Se konsa, ou ap pran eleman nimewo nan gwosè soti nan inpointer, ak mete yo nan done. Koulye a, li lè yo rdimansyonman orizontal. Si n egal 2, Lè sa a, pou chak pixel nan infile a, nou ap ale nan ekri li de fwa nan outfile la. Ki jan nou ekri dosye? Oke, nou gen fonksyon an fwrite, se konsa nou te pran konsèy nan konstri la ki gen bytes yo ke w ap lekri nan men, ak Lè sa a, nou pase nan gwosè, nimewo, ak pwodiksyon an, kote w ap ale nan dwe ekri sa a. Lè sa a, yo repete yon pwosesis, yo pral kapab yon repete senp pou bouk. Men, nou bezwen sonje yo ajoute padding pous Konsèp la nan padding se ke, byen, chak pixel se twa mòde, men nan gwosè nan chak scanline dwe gen yon miltip nan 4 bytes. Se konsa, si kantite a nan piksèl se pa yon plizyè nan 4, nou bezwen ajoute kèk padding, ki se jis zero. Koulye a, kontrèman ak Ki moun ki fè l ', ak kontrèman ak kopi, Lè sa a, infile imaj ak nan outfile dosye yo te diferan gen diferan padding paske yo ap diferan larjer. OK. Se konsa, petèt yon fòmil ta vini an sou la men isit la. Mwen pral kite li ak ou pou jwenn li soti, men di ou ke, yo ekri padding, byen, li nan jis yon fonksyon fputc senp, pase nan karaktè a ke ou vle ekri, epi Lè sa a, konsèy la dosye ke ou vle yo pou yo ekri. Se konsa, kounye a ke nou te rdimansyone orizontal, ak Lè sa a, itilize padding, sonje ke ou bezwen pou avanse pou pi dosye ou pozisyon endikatè, paske ou pa ka frèd nan pwotèj. Se konsa, ou vle asire w ke dosye ou endikatè pozisyon nan infile la se nan pwen ki kòrèk la. Paske nou vle tou rdimansyonman vètikal. Nou pa ka jis detire li orizontal, paske chak bezwen ranje yo dwe kopye fwa n. Koulye a, gen plizyè diferan fason yo fè sa. Se konsa, yon sèl, nou ka sèvi ak yon metòd reyekri, nan ke nou sonje tout piksèl yo nan yon ranje ki te bay nan yon etalaj, ak Lè sa a, nou ekri ki etalaj kòm anpil fwa jan sa nesesè. Oswa gen nan metòd la rekopye kote, apre ou fin li nan yon sèl ranje nan infile la ak Lè sa a lekri ke nan outfile a, ajoute padding a, nou fik Retounen nan kòmansman an nan ranje orijinal la, ak Lè sa a, repete orizontal la rèsizin apati de la. Kèlkeswa metòd la, menm si, ou pral vle chak pixel ap repete n fwa, ak tout ranje yo dwe repete fwa n tou. Ak sa, ou pral gen bitmap pi gwo pase lavi. Non mwen se Zamyla, e sa se CS50.