>> [Mūzikas atskaņošanai]
>> ZAMYLA Chan: Let 's trieciens lietas, līdz ar izmērus.
In izmērus, lietotājs pāriet, izmantojot komandrindas, bitmap attēlu, kas
viņi vēlas, lai jūs mēroga ar numuru ka tie arī pāriet,
komandrindas.
Kā mēs to darām?
>> Nu, pirmkārt lietas, pirmkārt, pieņemsim lauzt šo leju posmos.
Jūs gatavojas vēlaties, lai atvērtu INFILE ka tie dod jums, kā arī
izveidot un atvērt outfile ka jūs gatavojas īstenot
mainīti attēlu iekšā
Tad, jo jūs esat izmēru maiņas, un jo tas ir bitkarte, tā header, tāpēc
jūs gatavojas arī atjaunināt galveni Informācija par OUTFILE,
un rakstīt, ka iekšā
Tad jūs gatavojaties izlasīt par scanline no INFILE,
pixel-by-pikseļu, izmēru horizontāli un rakstot šos pikseļus uz
outfile, kā norādīts ar lietotāja skalas.
>> Jūs gatavojas atcerēties pievienot polsterējums, ja nepieciešams.
Vairāk par šo vēlāk.
Un tad arī mainīt vertikāli.
OK.
Tātad šis būs mazliet vairāk sarežģītāka, nekā Kas izdarīts, bet
kas ir līdzīgs, ka copy.c būs, atkal izrādīties ļoti noderīga.
Atcerieties, ka copy.c atver failu, aktualizē galvenes informāciju
outfile, tad skan uz scanline, pixel-by-pikseļu, rakstot katru pikseli
uz izejas faila scanline.
>> Tātad vēlreiz, jūsu pirmais solis varētu droši jābūt KP, copy.c, resize.c
savā PSET5 direktorijā.
Atcerieties, lai gan, pirms jūs kopēt to, lai pārliecinātos, ka jūs saprotat
Ļoti rūpīgi copy.c.
OK.
>> Tā ļauj atvērt failu.
Jūs zināt, kā to izdarīt.
Es esmu gatavojas atstāt, ka jums.
Nākamais, atjaunināt galvenes informāciju par OUTFILE.
Tāpēc, ka mums ir jauns bitmap, mums ir jauna galvenes info.
Kas mainās šeit?
Nu, faila izmērs mainīsies tāpēc, ka mēs ejam, lai būtu vairāk
pikseļu nekā pirms tam.
Attēla izmērs ir, līdz ar to arī mainīsies, jo ir
platums un augstums.
>> Tātad, kas mainīgie ir tie, kas precīzi?
Nu, ja paskatās uz galveni informāciju, jūs redzat, ka ir
biSizeImage, kas atspoguļo kopējo attēla baitos lielums,
ieskaitot pikseļiem un polsterējumu.
biWidth ir platums attēla pikseļos, mīnus polsterējums.
biHeight ir augstums attēls pikseļos.
Un tāpēc tie ir ietverti structs BITMAPFILEHEADER un
BITMAPINFOHEADER.
Jūs varat pateikt, kura no tām ir kas pēc dodas uz bmp.h un meklē
BITMAPINFOHEADER struktūrai un redzēt kas mainīgie ir uzskaitītas.
>> Tātad, lai atjauninātu outfiles galveni informāciju, jūs gatavojas vēlaties
mainīt šos vērtības augstumu un platumu.
Bet izredzes ir, jums var būt nepieciešams zināms no inFile ir galvenes informāciju
vēlāk, tāpēc vislabāk ir sekot abiem.
Bet ir ļoti skaidrs, ar savu mainīgo vārdus, lai jums nav nejauši
rakstīt nepareizas vērtības header par OUTFILE.
>> Tātad tagad pieņemsim nokļūt izlasīšanu scanline pikseļu pa pikseļu.
Atkal, mēs spēsim pārvērst mūsu uzticamo failu I / O bibliotēka, un apskatīt
fread funkcija.
fread notiek ar rādītāju uz struct kas satur baiti, kas
jūs lasījumā, lielums katras elements, ka jūs lasāt -
atkal, sizeof būs noderīga darboties šeit, skaits
elementi lieluma, lielums, kas tu esi lasīšanu, un visbeidzot,
inpointer, failu, jūs lasāt no.
Tātad jūs lietojat skaits elementus izmēru no inpointer, un
liekot tos datus.
>> Tagad ir pienācis laiks, lai mainītu horizontāli.
ja n ir vienāds ar 2, tad katram pikselim infile, mēs ejam, lai rakstīt
divreiz OUTFILE.
Kā mēs rakstīt failus?
Nu, mums ir fwrite funkciju, lai Mēs esam veikuši rādītāju uz struct
kas satur baiti, kas jūs esat rakstiski, un pēc tam mēs caurlaide
izmērs, numuru, un izejas, kur jūs esat būs rakstiski to.
Un pēc tam atkārtojiet procesu, būs iespēja vienkārši atkārtotais par cilpu.
>> Bet mums ir jāatceras pievienot polsterējums collas
Polsterējumu koncepcija ir tāda, ka, labi, katram pikselim ir trīs kodumi, bet
lielums katra scanline misas jābūt dalās ar 4 baiti.
Tātad, ja pikseļu skaits nav dalās ar 4, mums ir nepieciešams pievienot dažas
polsterējums, kas ir tikai nulles.
Tagad, atšķirībā Kas darījuši to, un atšķirībā kopēt, tad infile attēlu un
outfile fails ir atšķirīgs, ir atšķirīga polsterējums tāpēc, ka viņi
dažādu platumu.
>> OK.
Tāpēc varbūt formula būtu noderēs šeit.
Es atstāt to jums, lai atrastu to ārā, bet pateiks, ka, lai uzrakstītu polsterējums,
labi, tas ir tikai vienkāršs fputc funkcija, iet raksturā
ka jūs vēlaties rakstīt, un pēc tam failu rādītājs, ka jūs
vēlas rakstīt.
Tāpēc tagad, ka mēs esam mainīti horizontāli, un pēc tam izmanto polsterējums,
atcerieties, ka jums ir nepieciešams, lai pārvietotu failu stāvokļa indikators, jo jums
nevar fread uz polsterējumu.
Tātad jūs vēlaties, lai pārliecinātos, ka jūsu fails pozīcijas rādītājs INFILE
atrodas pareizā punktā.
Jo mēs arī vēlamies, lai izmērus vertikāli.
Mēs nevaram vienkārši stiept to horizontāli, jo katru rindu vajadzībām
kopēt n reizes.
>> Tagad tur ir vairākas atšķirīgas veidi, kā to izdarīt.
Tātad viens, mēs varam izmantot pārrakstīt metodi, kas ka atceramies visi pikseļi
gada dots rindu masīvā, un Tad mēs rakstām, ka masīvs kā
daudz reižu, cik nepieciešams.
Vai tur ir recopy metode, kurā, izlasot vienā rindā ar INFILE
un tad rakstiski, ka uz OUTFILE, pievienojot polsterējums, mēs fseek
atpakaļ uz sākumu sākotnējā rindā, un tad atkārtojiet horizontālā
izmēru no turienes.
Neatkarīgi no metodes, lai gan, jūs vēlamies katru pikseli ir jāatkārto
n reizes, un katrā rindā, lai būtu atkārto n reizes, kā arī.
>> Ar to, ka jums ir bitmap lielāks nekā dzīve.
Mans vārds ir Zamyla, un tas ir CS50.