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