>> [Muusika mängib]
>> ZAMYLA chan Laseme asjad korda resize.
In resize, kasutaja läbima kaudu käsurealt Rasterpildi et
nad tahavad sind skaala järgi number et nad ka läbima,
käsureal.
Kuidas me seda teeme?
>> Noh, esimesed asjad kõigepealt, lähme jaotada see samme.
Sa lähed tahan avada infile et nad teile, samuti
luua ja avada outfile et sa lähed panna
suurusega pildi sisse
Siis, sest sa oled saneerimist ja sest see on bitmap, see header, nii
sa lähed ka update kaudu teave outfile,
ja kirjutame sisse
Siis sa lähed välja lugeda scanline of infile,
pixel-by-pixel, saneerimist horisontaalselt ja kirjalikult nende pikslite
outfile täpsustatud kasutaja skaala.
>> Sa lähed mäleta lisada padding kui vaja.
Veel selle hiljem.
Ja siis ka suurust vertikaalselt.
OK.
Nii et see saab olema natuke rohkem keerulisem kui Kes teinud, kuid
mis on sarnane see, et copy.c tahte jällegi osutuda väga kasulikuks.
Pea meeles, et copy.c avab faili, värskendab header teave
outfile, siis loeb sisse scanline, pixel-by-pixel, kirjutades iga piksli
arvesse väljund faili scanline.
>> Nii et taas, teie esimene samm võiks ilmselt olema cp, copy.c, resize.c
oma PSET5 kataloog.
Pidage meeles, enne kui sa kuuled seda, veenduge, et saate aru,
copy.c väga põhjalikult.
OK.
>> Teeme avada faili.
Sa tead, kuidas seda teha.
Ma jätan selle sulle.
Seejärel ajakohastab päiseinformatsiooni jaoks outfile.
Kuna meil on uus bitmap, meil uus header info.
Mis muutuvas siin?
Noh, faili suurus on muutu sest me ei kavatse olla rohkem
piksleid kui enne.
Pildi suurus on seega ka muutu, kui see on
laius ja kõrgus.
>> Nii et mis muutujad on sellised, täpselt?
Noh, kui sa vaatad kaudu teave, näed seal on
biSizeImage, mis moodustab kokku pildi suurus baitides
sealhulgas pikslit ja polster.
biWidth on laiusega pilt pikslites miinus polster.
biHeight on kõrgus pilt pikslit.
Ja nii need sisalduvad structs BITMAPFILEHEADER ja
BITMAPINFOHEADER.
Te võite öelda, milline neist on mis, mida läheb bmp.h ja vaadates
BITMAPINFOHEADER struct ja nägemine Millised muutujad on seal loetletud.
>> Nii uuendada outfiles kaudu teave, sa lähed, et tahad
muuta need väärtused kõrgus ja laius.
Aga võimalused on, te võite vajada Euroopa infile päises info
hiljem, et kõige paremini jälgida nii.
Aga väga selgelt oma muutuja nimed, nii et sa ei kogemata
kirjutada vale väärtused päises outfile.
>> Nüüd lähme lugemisel vastu võetud scanline pixel-by-pixel.
Jällegi, me pöördume meie ustav faili I / O teek ja vaata
fread funktsioon.
fread võtab kursor struct mis sisaldab bytes et
sa loed, suurus iga element, et sa loed -
uuesti, sizeof saab olema kasulik funktsioneerida siin mitmeid
elementide suurus, suurus, et sa oled lugemine ja seejärel lõpuks
inpointer, fail sa loed alates.
Nii et sa võtad number elemendid suurus alates inpointer ja
laskmiseks andmed.
>> Nüüd on aeg suurust horisontaalselt.
kui n on 2, siis iga piksel infile, me ei kavatse kirjutada
kaks korda outfile.
Kuidas kirjutada faile?
Noh, meil on fwrite funktsioon, nii et oleme võtnud kursor struct
mis sisaldab bytes, et sa oled kirjutamise ja siis liigu
suurus, arv ja võimsus, kus sa lähed olema kirjalikult.
Ja siis korrata protsessi saab võimalik lihtsa iteratiivne silmus.
>> Aga me peame meeles pidama, lisada padding sisse
Mõiste polster on selles, et, noh, Iga piksel on kolm hammustab, kuid
suurus iga scanline must olema mitu 4 baiti.
Nii et kui pikslite arv ei ole mitmekordselt 4, meil on vaja lisada mõned
polster, mis on vaid nullid.
Nüüd erinevalt Kes teinud, ning erinevalt koopia, siis infile pilt ja
outfile fail on erinev olema erinev polster, sest nad on
erineva laiusega.
>> OK.
Nii et ehk jaotusvalemist tulla käepärane siin.
Ma jätan selle teile seda välja selgitada, kuid öelda, et kirjutada polster
noh, see on lihtsalt fputc funktsiooni kulgeb iseloomu
et sa tahad kirjutada, ja siis file pointer, et sa
soovite kirjutada.
Nüüd, et me oleme suurust horisontaalselt, ja siis kasutada polster
pidage meeles, et kui teil on vaja faili asendinäidu, sest sa
ei fread arvesse polster.
Nii et sa tahad veenduda, et teie fail koht märgi infile
on õige koht.
Sest me tahame suurust vertikaalselt.
Me ei saa lihtsalt venitada horisontaalselt, sest iga rida vajadusi
tohi kopeerida n korda.
>> Nüüd on mitmeid erinevaid kuidas seda teha.
Nii et üks, saame kasutada ümberkirjutamine meetodi kohta et me mäletame kõik pikslid
antud rida massiivi ja siis me kirjutame, et massiivi
mitu korda kui vaja.
Või seal recopy meetod, kus pärast lugemist ühel real infile
ja seejärel kirjalikult, et võtta outfile, Lisades polster me fseek
Tagasi algust esialgse rea ja korrake horisontaalne
saneerimist sealt.
Sõltumata meetodist, kuigi, saate tahan, et iga piksel korrata
n korda ja igal real olla korrata n korda samuti.
>> Koos, et teil on bitmap suurem kui elu.
Minu nimi on Zamyla ja see on CS50.