>> [Music kucheza]
>> ZAMYLA CHAN: Hebu pigo mambo ya juu na resize.
Katika resize, user itapita katika, kupitia mstari amri, bitmap picha kwamba
wanataka kuongeza kwa idadi kwamba wao pia kupita katika,
katika mstari amri.
Jinsi gani tunafanya hivi?
>> Naam, mambo ya kwanza ya kwanza, hebu kuvunja chini katika hatua.
Wewe ni kwenda unataka kufungua infile kwamba wao kukupa, kama vile
kujenga na kufungua outfile kwamba wewe ni kwenda kuweka
resized picha in
Basi, kwa sababu wewe ni resizing, na kwa sababu ni bitmap, ni header, hivyo
utaenda pia update header habari kwa ajili ya outfile,
na kuandika kwamba in
Basi, wewe ni kwenda kusoma katika scanline ya infile,
pixel-na-pixel, resizing usawa na kuandika saizi wale katika
outfile, kama maalum na mtumiaji wadogo.
>> Wewe ni kwenda kukumbuka kuongeza padding kama ni muhimu.
Zaidi juu ya baadaye.
Na kisha, pia resize wima.
OK.
Hivyo hii ni kwenda kuwa kidogo zaidi ngumu zaidi ya nani kufanya jambo hilo, lakini
nini sawa ni kwamba copy.c mapenzi, tena, kuthibitisha muhimu sana.
Kumbuka kwamba copy.c kufungua faili, updates header habari kwa ajili ya
outfile, basi wasomaji katika scanline, pixel-na-pixel, kuandika kila pixel
katika pato faili scanline.
>> Hivyo tena, hatua yako ya kwanza nguvu pengine kuwa na linganisha, copy.c, resize.c
ndani ya PSET5 saraka yako.
Kumbuka ingawa, kabla ya nakala yake, kuhakikisha kwamba kuelewa
copy.c vyema.
OK.
>> Basi hebu kufungua faili.
Unajua jinsi ya kufanya hivyo.
Mimi naenda kuondoka hivyo na wewe.
Next, update header habari kwa outfile.
Kwa sababu tuna bitmap mpya, tuna mpya header info.
Nini kubadilisha hapa?
Naam, faili ni kwenda na mabadiliko kwa sababu tunakwenda na zaidi
saizi kuliko hapo kabla.
ukubwa picha, hivyo, pia kwenda na mabadiliko, kama ni
upana na urefu.
>> Hivyo ambayo vigezo ni wale, hasa?
Naam, kama ukiangalia katika header habari, unaweza kuona kuna
biSizeImage, ambayo inawakilisha jumla ukubwa wa picha katika ka,
ikiwa ni pamoja na saizi na padding.
biWidth ni upana wa picha katika saizi, minus padding.
biHeight ni urefu wa picha katika saizi.
Na hivyo wale zilizomo katika structs BITMAPFILEHEADER na
BITMAPINFOHEADER.
Unaweza kuwaambia ambayo ni moja ambayo na kwenda bmp.h na kuangalia
BITMAPINFOHEADER struct na kuona ambayo vigezo ni waliotajwa huko.
>> Hivyo update header outfiles habari, wewe ni atataka
kubadili maadili wale wa urefu na upana.
Lakini nafasi ni, unaweza haja ya baadhi ya ya infile ya header habari
baadaye, hivyo bora kwa kuweka wimbo wa wote.
Lakini kuwa wazi sana na kutofautiana yako majina ili kufanya si ajali
kuandika maadili sahihi katika header kwa outfile.
>> Hivyo sasa hebu kupata kusoma katika scanline pixel-na-pixel.
Tena, tunakwenda kurejea kwa muaminifu wetu faili I / O maktaba, na kuangalia
kazi fread.
fread inachukua katika pointer kwa struct ambayo yana ka kwamba
wewe ni kusoma katika, ukubwa wa kila hiki kwamba wewe ni kusoma -
tena, sizeof ni kwenda kuwa na manufaa kazi hapa, idadi ya
mambo ya kawaida, ukubwa, kwamba wewe ni kusoma, na kisha hatimaye,
inpointer, faili kwamba wewe ni kusoma kutoka.
Hivyo wewe ni kuchukua vipengele namba ya kawaida kutoka inpointer, na
kuweka katika data.
>> Sasa ni wakati wa resize usawa.
kama n sawa na 2, kisha kwa kila pixel katika infile, tunakwenda kuandika
mara mbili katika outfile.
Je, sisi kuandika files?
Naam, tuna kazi fwrite, hivyo tumekuwa kuchukuliwa pointer kwa struct
ambayo ina ka kwamba wewe ni kuandika kutoka, na kisha sisi kupita katika
kawaida, idadi, na pato, ambapo wewe ni kwenda kuwa kuandika hiyo.
Na kisha kurudia utaratibu, itakuwa uwezo iterative rahisi kwa kitanzi.
>> Lakini tunahitaji kukumbuka kuongeza padding in
dhana ya padding ni kwamba, vizuri, kila pixel ni kuumwa tatu, lakini
ukubwa wa kila lazima scanline kuwa nyingi ya 4 ka.
Hivyo kama idadi ya saizi ni si mbalimbali ya 4, tunahitaji kuongeza baadhi
padding, ambayo ni zeroes tu.
Sasa, tofauti na nani kufanya jambo hilo, na tofauti na nakala, kisha infile picha na
outfile file kuwa tofauti na padding mbalimbali kwa sababu wao ni
widths mbalimbali.
>> OK.
Hivyo labda formula ingekuwa kuja katika Handy hapa.
Mimi itabidi kuondoka kwa wewe kupata nje, lakini kuwaambia kwamba, kuandika padding,
vizuri, ni rahisi tu fputc kazi, kupita katika tabia ya
kwamba unataka kuandika, na kisha file pointer kwamba
unataka kuandika kwa.
Hivyo sasa kwamba tumekuwa resized usawa, na kisha kutumika padding,
kukumbuka kwamba unahitaji hoja faili yako nafasi kiashiria, kwa sababu wewe
hawezi fread katika padding.
Kwa hiyo unataka kuhakikisha kwamba faili yako nafasi kiashiria katika infile
ni katika hatua sahihi.
Kwa sababu sisi pia wanataka resize wima.
Hatuwezi tu kunyoosha usawa, kwa sababu mahitaji ya kila mstari
kunakiliwa mara n.
>> Sasa, kuna mbalimbali njia za kufanya hivyo.
Hivyo moja, tunaweza kutumia njia rewrite, katika kwamba sisi kukumbuka yote ya saizi
ya kupewa mfululizo katika safu, na kisha sisi kuandika kwamba safu kama
mara nyingi kama inahitajika.
Au kuna njia recopy ambapo, baada ya kusoma katika mstari mmoja katika infile
na kisha kuandika kwamba ndani ya outfile, kuongeza padding, sisi fseek
nyuma ya kuanza kwa mstari awali, na kisha kurudia usawa
resizing kutoka huko.
Bila kujali njia, ingawa, wewe utakuwa nataka kila pixel kuwa mara kwa mara
n mara kwa mara, na kila mstari kuwa mara kwa mara mara n pia.
>> Pamoja na kwamba, itabidi bitmap kubwa kuliko maisha.
Jina langu ni Zamyla, na hii ni CS50.