>> [Musiikki soi]
>> ZAMYLA Chan: Let n isku asioita, joissa resize.
Vuonna kokoa, käyttäjä kulkea kautta komentoriviltä, ​​bittikarttakuvana että
he haluavat sinun mittakaavassa numero että ne myös kulkea,
komentoriville.
Miten teemme tämän?
>> No, asiat ensin, katsotaanpa jakaa järjestelmä vaiheita.
Olet menossa halua avata infile että he antavat sinulle, sekä
luoda ja avata outfile että aiot laittaa
kokoa kuvan sisään
Sitten, koska olet kokoa, ja koska se on bittikartta, se otsikon, niin
aiot päivittää myös otsikon tietoa outfile,
ja kirjoittaa, että sisään
Sitten aiot lukea osaksi juova ja infile,
pixel-by-pixel, koon vaakasuunnassa ja kirjoittamisen kuvapisteryhmistä
outfile määritellyllä jonka käyttäjän asteikon.
>> Olet menossa muistaa Lisää täyte tarpeen.
Siitä lisää myöhemmin.
Ja sitten, myös kokoa pystysuunnassa.
OK.
Joten tämä tulee olemaan hieman enemmän monimutkaisempi kuin kuka tehnyt sen, mutta
mitä vastaavia on, että copy.c tulee, jälleen osoittautua erittäin hyödyllistä.
Muista, että copy.c avaa tiedoston, päivittää otsikon tiedot
outfile, sitten lukee osaksi juova, pixel-by-pixel, kirjallisesti joka pikseli
tulosteeseen tiedoston juova.
>> Joten jälleen, ensimmäinen askel voisi varmaan olla cp, copy.c, resize.c
omaan PSET5 hakemistoon.
Muista kuitenkin, ennen kuin kopioit sen, varmista, että ymmärrät
copy.c hyvin perusteellisesti.
OK.
>> Joten avaa tiedoston.
Tiedät miten se tehdään.
Aion jättää sen sinulle.
Seuraavaksi päivitetään otsikkotiedot varten outfile.
Koska meillä on uusi bittikartta, meillä on uusi otsikko info.
Mikä muuttuu täällä?
No, tiedostokoko tulee muuttumaan koska aiomme olla enemmän
pikseleitä kuin ennen.
Kuvakoko on siis myös tulee muuttumaan, sillä on
leveys ja korkeus.
>> Joten mikä muuttujat ovat ne, tarkalleen?
No, jos tarkastellaan otsikkoon tietoja, näet siellä on
biSizeImage, joka edustaa yhteensä kuvan koko tavuina
lukien pikseliä ja pehmusteet.
biWidth on kuvan leveyden pikseleinä miinus täyte.
biHeight on korkeus kuvan pikseleinä.
Ja niin nämä sisältyvät structs BITMAPFILEHEADER ja
BITMAPINFOHEADER.
Voit kertoa kumpi on kumpi by menossa bmp.h ja katsot
BITMAPINFOHEADER struct ja näkeminen mitkä muuttujat on lueteltu siinä.
>> Joten päivittää outfiles header tietoa, olet menossa haluavat
muuttaa näitä arvoja korkeus ja leveys.
Mutta mahdollisuudet ovat, voit tarvita ja infile n otsikkotietoja
myöhemmin, joten paras seurata molempia.
Mutta olla hyvin selkeä muuttuja nimiä niin, että et ole vahingossa
kirjoittaa virheellisiä arvoja otsikon outfile.
>> Joten nyt käykäämme luettavaksi juova pikseli pikseli.
Jälleen aiomme kääntyä meidän luotettava tiedoston I / O-kirjasto ja katso
fread toiminto.
fread vie osoitin struct joka sisältää tavujen
luet vuonna, koko kunkin elementti, joka luet -
jälleen, sizeof tulee olemaan hyödyllinen tässä tapauksessa toimi määrä
osia koon, kokoa, että olet käsittelyssä, ja sitten lopulta,
inpointer, tiedosto, luet alkaen.
Joten olet ottaen useita elementtejä koosta alkaen inpointer, ja
laskemisesta tietoja.
>> Nyt on aika muuttaa vaakasuunnassa.
jos n on 2, niin kunkin pikselin infile, aiomme kirjoittaa sitä
kahdesti outfile.
Miten voimme kirjoittaa tiedostoja?
No, meillä on fwrite toiminto, joten olemme ottaneet osoitin struct
joka sisältää tavut, että olet kirjallisesti, ja sitten me kulkea
koko, lukumäärä, ja lähtö, jossa aiot olla kirjallisesti että.
Ja sitten toistaa prosessi, on pystyy yksinkertainen iteratiivinen silmukan.
>> Mutta meidän täytyy muistaa Lisää täyte sisään
Käsite pehmuste on, että hyvin, jokainen pikseli on kolme puremat, mutta
koko kunkin juova must olla 4 tavun kerrannainen.
Joten jos pikselien määrä ei ole jaollinen 4, meidän täytyy lisätä joitakin
pehmuste, joka on vain nollia.
Nyt, toisin kuin Who Done It, ja toisin kuin kopio, sitten infile kuva ja
outfile tiedosto on erilainen on eri padding koska he
eri leveyksiä.
>> OK.
Joten ehkä kaava olisi ovat käteviä täällä.
Jätän sen sinulle löytää sitä, mutta kertoa teille, kirjoittaa täyte,
No, se on vain yksinkertainen fputc toiminto, ohimennen merkki
että haluat kirjoittaa, ja sitten tiedoston osoitin, että olet
haluat kirjoittaa.
Joten nyt olemme kokoa vaakasuunnassa, ja sitten käytetään täyte,
Muista, että sinun tarvitsee siirtää tiedoston asennonosoittimen, koska olet
voi fread osaksi täyte.
Joten haluat varmistaa, että tiedosto Asennonosoitin infile
on oikeassa kohdassa.
Koska haluamme myös kokoa pystysuunnassa.
Emme voi vain venyttää se vaakasuoraan, koska jokainen rivi tarpeisiin
kopioitava n kertaa.
>> Nyt on olemassa useita erilaisia tapoja tehdä tätä.
Joten, voimme käyttää uudelleenkirjoitus menetelmää, vuonna että muistamme kaikki pikseliä
Tietyn rivin array, ja sitten kirjoittaa, että levyjärjestelmän
monta kertaa kuin tarvitaan.
Tai siellä recopy menetelmä, jossa, lukemisen jälkeen yksi rivi infile
ja sitten kirjallisesti, että osaksi outfile, lisäämällä täyte, me fseek
takaisin alkuun alkuperäisen rivin, ja toista sitten vaaka
koon sieltä.
Menetelmästä riippumatta, vaikka, sinun Haluan jokaisen pikselin toistua
n kertaa, ja jokainen rivi on toistetaan n kertaa yhtä hyvin.
>> Kanssa, että sinulla on bittikartta elämää suurempia.
Nimeni on Zamyla, ja tämä on CS50.