>> [Muzikavimo]
>> ZAMYLA CHAN: Leiskite smūgis things up su dydžio keitimo.
Be dydžio keitimo, vartotojas turės praeiti per komandinės eilutės, rastras vaizdas, kuris
jie nori jums masto numerį kad jie taip pat praeiti,
į komandų eilutę.
Kaip mes tai darome?
>> Na, Pirmasis ko pirma, tegul padalyti į veiksmus.
Jūs ketinate norite atidaryti infile kad jie jums, taip pat
sukurti ir atidaryti outfile kad jūs ketinate daryti
dydžio nuotrauka in
Tada, nes jūs dydį, ir nes tai Bitmap, tai galva, todėl
jūs ketinate pat atnaujina antraštę informacija apie outfile,
ir rašyti, kad in
Tada jūs ketinate skaityti į iš INFILE Scanline,
pikselių-by-pixel, dydį horizontaliai ir rašyti šiuos vaizdo į
outfile, kaip nurodyta pagal vartotojo mastu.
>> Jūs ketinate prisiminti pridėti išklojimui, kaip reikia.
Daugiau apie tai vėliau.
Ir tada, taip pat keisti vertikaliai.
Gerai.
Taigi, tai bus šiek tiek daugiau sudėtingiau nei kas tai padarė, bet
kas panašu tai, kad copy.c bus, vėl pasirodyti labai naudinga.
Atminkite, kad copy.c atidaro failą, atnaujina antraštės informaciją
outfile, tada rašoma į Scanline, pikselių-by-pixel, rašyti kiekvieną pikselį
į išvesties failo Scanline.
>> Taigi dar kartą, jūsų pirmas žingsnis galėtų tikriausiai būti cp, copy.c, resize.c
į savo PSET5 kataloge.
Atminkite, nors, kol jūs nukopijuokite jį, įsitikinkite, kad jums suprasti,
copy.c labai kruopščiai.
Gerai.
>> Taigi galime atidaryti failą.
Jūs žinote, kaip tai padaryti.
Aš ruošiuosi palikti, kad jums.
Be to, atnaujinti antraštės informaciją už outfile.
Kadangi mes turime naują Bitmap, mes turime naują antraštės informacijos.
Kas keičiasi čia?
Na, failo dydis keisis nes mes ketiname turėti daugiau
taškų, nei anksčiau.
Vaizdo dydis, taigi ir ketina keisti, kaip yra
plotis ir aukštis.
>> Taigi, kuris kintamieji yra tie, tiksliai?
Na, jei jūs žiūrite į antraštę informacija, kaip matote yra
biSizeImage, atstovaujanti viso dydis baitais paveiksliuko
įskaitant pikselių ir kamšalu.
biWidth yra iš paveikslėlio plotis pikseliais, atėmus apdaila.
biHeight yra aukštis pikseliais paveikslėlis.
Ir todėl tie yra išdėstytos structs BITMAPFILEHEADER ir
BITMAPINFOHEADER.
Jūs galite pasakyti, kuri iš jų yra kuris, ketina bmp.h ir žiūri
BITMAPINFOHEADER struct ir nepatikėsiu kurie kintamieji yra išvardytos.
>> Taigi, norint atnaujinti outfiles antraštę informacija, jūs ketinate norite
pakeisti tas vertybes aukštis ir plotis.
Tačiau yra tikimybė, kad jums gali prireikti iš infile Header informacijos
vėliau, todėl geriausia sekti abu.
Bet labai aiškiai savo kintamojo pavadinimai, kad jūs ne atsitiktinai
rašyti neteisingus vertybes už outfile antraštė.
>> Taigi dabar galime gauti skaityti į Scanline pikselių-by-pixel.
Vėlgi, mes ketiname kreiptis į mūsų patikimas failą I / O biblioteka, ir pažvelgti į
fread funkcija.
fread trunka rodyklė į struct kad bus pateiktos baitų kad
jūs skaityti, vienas dydis elementas, kad jūs skaitote -
vėl, sizeof bus naudinga veikti čia ir numeris
elementai dydis, dydis, kad jūs esate skaityti, ir galiausiai,
inpointer, failas, jūs skaitote iš.
Taigi jūs vartojate numeris elementai dydžio nuo inpointer ir
jų išleidimą į duomenis.
>> Dabar atėjo laikas keisti horizontaliai.
jei n yra lygus 2, tada kiekvienam piksel INFILE, mes ketiname rašyti
du kartus per outfile.
Kaip mes rašyti failus?
Na, mes turime fwrite funkciją, todėl mes atlikome žymiklį į struct
kad yra baitai, kad jūs raštu, o tada mes pereiname į
dydis, numeris, ir išėjimo, kur jūs ketinate būti raštu.
Ir tada kartoti procesą, bus galėtų paprastas kartotinis už linijos.
>> Bet mes turime prisiminti pridėti išklojimui in
Iš išklojimui koncepcija, kad gerai, kiekvienas pikselis yra trys įkandimų, bet
dydis kiekvienam Scanline misa būti iš 4 baitų kartotinis.
Taigi, jei taškų skaičių nėra kartotinis 4, mes turime pridėti šiek tiek
kamšalas, kuris yra tik nuliai.
Dabar, skirtingai Kas tai padarė, ir, priešingai nei kopija, tada INFILE vaizdo ir
outfile failas yra skirtingi turi skiriasi apdaila, nes jie
skirtingų pločių.
>> Gerai.
Taigi, galbūt formulė būtų praversti čia.
Aš palikti jį jums rasti ją, bet pasakyti, kad rašyti išklojimui,
gerai, kad tai tik paprastas fputc funkcija, einančios į simbolį
kad jūs norite rašyti, ir tada Failas žymeklis, kad jūs
nori rašyti.
Taigi dabar, kad mes keičiamas horizontaliai, ir tada naudojamas išklojimui,
Atminkite, kad jums reikia perkelti savo failą padėties indikatorius, nes jums
negali fread į paminkštinimas.
Taigi, jūs norite įsitikinti, kad jūsų failas pozicija rodiklis INFILE
yra teisinga vietoje.
Nes mes taip pat norime dydį vertikaliai.
Mes galime ne tik ištempti jį horizontaliai, nes kiekviena eilutė poreikiai
būti kopijuojami n kartų.
>> Dabar, yra keletas skirtingų būdų, kaip tai padaryti.
Taigi vienas, mes galime naudoti perrašyti metodą, kad mes prisimename visus pikselių
iš suteikta eilutėje masyvo ir tada rašome, kad matrica, kaip
tiek kartų, kiek reikia.
Arba ten atkartoja metodas, kai, perskaičius vienoje eilėje į INFILE
ir tada rašyti, kad į outfile, pridėti išklojimui, mes fseek
Grįžti į pradinį eilės pradžioje, ir tada pakartokite horizontalus
dydį iš ten.
Nepaisant metodo, nors, jums norime, kad kiekvienas pikselis būti pakartota
n kartų, o kiekviena eilutė turi būti kartojamas n kartų, taip pat.
>> Su tuo, jūs turite bitmap didesnis nei gyvenime.
Mano vardas Zamyla, ir tai yra CS50.