[Predvaja glasba] ZAMYLA CHAN: Dajva udarec Stvari gor z velikost. V spreminjanje velikosti, bo uporabnik prenese v prek ukazni vrstici, bitna slika, ki hočejo, da lestvico, ki jo številne da so tudi oni potujejo v, v ukazno vrstico. Kako bomo to naredili? No, najprej stvari najprej, kaj je razdeliti v korake. Boste želeli odpreti INFILE da so ti dali, kot tudi ustvarjanje in odprite OUTFILE da boš dal spremenite velikost slike noter Potem, ker ste spreminjanje velikosti, in ker je bitna, pa glava, tako boš tudi posodobiti glavo Podatki za izhodna_datoteka, in pisati, da noter Nato boste prebrali v scanline v INFILE, pixel-by-pixel, spreminjanje velikosti vodoravno in pisanje teh pik v outfile, kot je določeno v uporabnikovem lestvici. Ti boš, da se spomnimo, da dodamo polnilo kot je potrebno. Več o tem kasneje. In potem, tudi spreminjanje velikosti navpično. OK. Torej, to se bo malo bolj zapleteno, kot kdo to storjeno, ampak kar je podobno, je, da copy.c bo še enkrat, zelo koristna. Ne pozabite, da copy.c odpre datoteko, posodobi informacije v glavi za outfile, nato pa prebere v scanline, pixel-by-pixel, pisanje vsak pixel v scanline izhodne datoteke je. Torej še enkrat, morda vaš prvi korak verjetno biti cp, copy.c, resize.c v vašem PSET5 imenik. Ne pozabite, čeprav, preden ga boste kopirali, se prepričajte, da boste razumeli Zelo temeljito copy.c. OK. Torej, odprimo datoteko. Saj veste, kako to storiti. Bom prepustil tebi. Naslednja posodobi informacije v glavi za izhodna_datoteka. Ker imamo novo bitno sliko, imamo več informacij glavo. Kaj se je spremenilo tu? No, velikost datoteke se bo spremenilo saj bomo imeli več slikovnih pik kot prej. Velikost slike je, torej, tudi bo spremenilo, kot je širina in višina. Torej, katere spremenljivke so tiste, točno? No, če pogledaš na glavi Podatki, ki jih vidite, da je biSizeImage, ki predstavlja skupno velikost slike v bajtih vključno pik in oblazinjenja. biWidth je širina slike v pikslih, minus oblazinjenje. biHeight je višina slike v pikslih. In tako tistih, ki so vsebovani v konstruktov BITMAPFILEHEADER in BITMAPINFOHEADER. Lahko poveste, katera je, ki jih bo bmp.h in gledaš BITMAPINFOHEADER struct in videnje spremenljivke, ki so tam navedene. Torej posodobiti outfiles glavo informacije, boste želeli spremenite te vrednosti višina in širina. Vendar so možnosti, boste morda potrebovali nekaj informacij v glavi INFILE je kasneje, zato najbolje, da spremljate tako. Vendar je bilo zelo jasno, z vašo spremenljivko imena, tako da ne boste po nesreči pisati napačne vrednosti v Glava za izhodna_datoteka. Torej, zdaj pojdimo k branju v scanline pixel-by-pixel. Spet bomo obrniti na naši zvesti / I datoteke knjižnico in poglej fread funkcijo. fread traja v kazalec na struct , ki bo vseboval bajte, ki berete v, velikost vsakega element, ki berete - še enkrat, sizeof se bo koristno delovanje tod število Elementi velikosti, velikosti, da si branje v in se na koncu, inpointer, datoteka, ki berete iz. Torej ste ob številčnih elementov velikosti od inpointer ter začetek njihove podatke. Zdaj je čas, da vodoravno velikost. če je n enak 2, nato pa za vsako slikovno točko v INFILE, bomo pisati dvakrat na izhodna_datoteka. Kako napisati datoteke? No, imamo fwrite funkcijo, tako smo vzeli kazalec na struct , ki vsebuje bajte, da ste pisni obliki, nato pa se peljemo v velikost, število in izhod, kjer boš pisal, da je. In nato ponovite postopek, bo lahko preprosto ponavljajoč zanko. Vendar moramo zapomniti dodati oblazinjenje prijavite Pojem oblazinjenja je, da tudi, Vsak pixel je tri ugrizi, vendar Velikost vsakega scanline mošta večkratnik števila 4 bajte. Torej, če število točk ne večkratnik števila 4, moramo dodati nekaj oblazinjenje, ki je le ničle. Zdaj pa, za razliko Kdo to storjeno, in za razliko od kopijo, nato pa INFILE podoba in outfile datoteke so drugačni imajo drugačno oblazinjenje, ker oni različne širine. OK. Torej, morda bi formulo prišel prav tukaj. Bom pustil na vas, da ga najdejo, vendar vam povem, da, da napišete oblazinjenje, no, to je samo preprosta funkcija fputc, , ki poteka v značaju , ki jo želite napisati, in nato Datoteka kazalec, ki ga želim pisati. Torej sedaj, ko smo spreminjati vodoravno in nato uporablja obloga ne pozabite, da boste morali premakniti datoteko Kazalnik položaja, ker vam ne more fread v oblazinjenja. Tako da boste želeli, da poskrbite, da vaša datoteka Kazalnik položaja v INFILE je na pravo mesto. Ker želimo, da tudi spremenite velikost navpično. Ne moremo se raztezajo vodoravno, ker vsaka vrstica potrebe je treba kopirati n-krat. Sedaj je na voljo več različnih načinov, da to storijo. Torej eno, lahko uporabimo metodo reportaža, v da se spomnimo vseh pikslov v dani vrsti v matriki, in Nato smo napisali, da je niz, kot je tolikokrat, kot je potrebno. Ali obstaja način recopy, kjer po branju v eni vrsti v INFILE in nato obvestita, da v izhodna_datoteka, dodajanje oblazinjenje, smo fseek nazaj na začetek prvotne zapored in nato ponovite vodoravno spreminjanje velikosti od tam. Ne glede na metodo, čeprav, boste želimo, da vsak pixel je treba ponoviti n-krat, in vsaka vrstica biti ponovi n-krat, kakor tudi. S tem boste imeli bitne slike večji od življenja. Ime je Zamyla, in to je CS50.