>> [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.