>> [Daqq tal-mużika]
>> ZAMYLA Chan: blow Ejja affarijiet up ma 'resize.
Fil resize, l-utent se jgħaddu, permezz kmand tal-linja, immaġni Bitmap li
huma jridu li inti iskala minn numru li huma wkoll tgħaddi fi,
fil-linja tal-kmand.
Kif nistgħu nagħmlu dan?
>> Ukoll, L-ewwelnett, ejja din tinqasam passi.
Int ser tixtieq li tiftaħ il-infile li huma jagħtuk, kif ukoll
joħolqu u tiftaħ il-outfile li int ser tpoġġi l-
image daqs ieħor pulzieri
Imbagħad, għax int ristrutturazzjoni, u għaliex dan huwa Bitmap, din header, hekk
int ser taġġorna wkoll il-header informazzjoni għall-outfile,
u jiktbu dak pulzieri
Imbagħad, int ser jinqara fil- l scanline tal-infile,
pixel--pixel minn, resizing orizzontalment u l-kitba dawk pixels fil-
outfile, kif speċifikat mill-iskala l-utent.
>> Int ser tiftakar li żid padding kif meħtieġ.
Aktar dwar dan aktar tard.
U mbagħad, ukoll resize vertikalment.
OK.
Allura dan se jkun ftit aktar ikkumplikat minn Who Magħmul Huwa, iżda
dak li huwa simili hija li copy.c se, għal darb'oħra, jkunu utli ħafna.
Ftakar li copy.c jiftaħ fajl, jaġġorna l-informazzjoni header għall-
outfile, allura jaqra fil-scanline, pixel-'pixel mill-kitba kull pixel
fil scanline-fajl output tal.
>> Għalhekk għal darb'oħra, l-ewwel pass tiegħek jista 'probabbilment jkun li cp, copy.c, resize.c
fis direttorju PSET5 tiegħek.
Ftakar għalkemm, qabel ma jibagħtu kopja tagħha, biex taċċerta ruħek li tifhem
copy.c sewwa ħafna.
OK.
>> Mela ejja jiftaħ fajl.
Inti taf kif għandek tagħmel dan.
Jien ser leave li lilek.
Sussegwentement, jaġġornaw l-informazzjoni header għall-outfile.
Għaliex għandna Bitmap ġdid, għandna info header ġdid.
X'hemm jinbidlu hawn?
Ukoll, id-daqs fajl huwa se jibdlu għaliex aħna qed tmur li jkollhom aktar
pixels minn qabel.
Id-daqs immaġini huwa, għalhekk, ukoll se jibdlu, kif inhu l-
wisa 'u l-għoli.
>> Allura għalih il-varjabbli huma dawk, eżattament?
Ukoll, jekk inti tħares lejn il-header informazzjoni, tara hemm
biSizeImage, li jirrappreżenta t-total daqs tal-immaġini fil bytes,
inklużi pixels u padding.
biWidth huwa l-wisa 'l-immaġini pixels, nieqes l-padding.
biHeight huwa l-għoli ta ' l-immaġini fil pixels.
U hekk dawk jinsabu fil- structs BITMAPFILEHEADER u
BITMAPINFOHEADER.
Tista 'tgħid liema waħda hija li minn ser bmp.h u tħares lejn l-
Struct BITMAPINFOHEADER u jaraw għalih il-varjabbli huma elenkati hemmhekk.
>> Allura biex taġġorna l-header outfiles informazzjoni, int ser jridu
tibdel dawk il-valuri tal- għoli u l-wisa.
Iżda ċansijiet huma, inti jista 'jkollok bżonn xi ta 'informazzjoni header tal-infile tal
aktar tard, hekk aħjar li jżommu rekord tat-tnejn.
Iżda tkun ċara ħafna ma 'varjabbli tiegħek ismijiet hekk li inti ma aċċidentalment
ikteb il-valuri skorretti fir l-header għall-outfile.
>> Allura issa ejja nikseb qari fis l-pixel-by pixel scanline.
Għal darb'oħra, aħna qed tmur li jduru għal trusty tagħna fajl I / O librerija, u ħarsa lejn
il-funzjoni fread.
fread jieħu fil pointer għal Istituzzjonjijiet li se jkun fiha l-bytes li
int qari, id-daqs ta 'kull element li qed taqra -
għal darb'oħra, sizeof se tkun utli jiffunzjonaw hawn, in-numru tal-
elementi ta 'daqs, id-daqs, li int qari, u mbagħad finalment, il-
inpointer, il-fajl li int qari minn.
Allura inti qed tieħu elementi numru ta 'daqs minn inpointer, u
tqegħid tagħhom fiċ-data.
>> Issa wasal iż-żmien biex resize orizzontalment.
jekk n ugwali 2, allura għal kull pixel fil- l infile, aħna qed tmur biex tiktibha
darbtejn fil-outfile.
Kif nistgħu jiktbu fajls?
Well, aħna għandna l-funzjoni fwrite, hekk aħna ħadt l-pointer għall-Istituzzjonjijiet
li fiha l-bytes li int miktub minn, u allura aħna jgħaddu
daqs, in-numru, u l-output, fejn int ser tkun bil-miktub dan.
U mbagħad jirrepeti proċess, se jkun kapaċi a iterattiv sempliċi għall-loop.
>> Iżda għandna bżonn biex tiftakar żid padding pulzieri
Il-kunċett ta 'padding hija li, ukoll, kull pixel huwa tliet bites, iżda l-
daqs ta 'kull must scanline ikun multiplu ta '4 bytes.
Allura jekk in-numru ta 'pixels mhuwiex multiplu ta '4, għandna bżonn li żżid xi
ikkuttunar, li huwa biss zeroes.
Issa, b'differenza Who Magħmul Huwa, u b'differenza kopja, imbagħad immaġni infile u l-
fajl outfile jkunu jkollhom differenti ikkuttunar differenti għaliex qed
b'wisa 'differenti.
>> OK.
Allura forsi formula kieku jaqgħu fil handy hawn.
I ser tħalli f'idejn għalik li ssib it out, iżda jgħidlek li, jiktbu ikkuttunar,
ukoll, huwa biss funzjoni fputc sempliċi, tgħaddi fil-karattru
li inti tixtieq li tikteb, u mbagħad il-pointer fajl li inti
tixtieq li tikteb.
Allura issa li konna daqs ieħor orizzontalment, u imbagħad jintuża padding,
ftakar li għandek bżonn biex jimxu fajl tiegħek indikatur tal-pożizzjoni, għaliex inti
ma tistax fread fis padding.
Allura inti tixtieq li tagħmel ċert li l-fajl tiegħek indikatur tal-pożizzjoni fil-infile
hija fil-punt korretta.
Għaliex aħna rridu wkoll li resize vertikalment.
Ma nistgħux sempliċement stretch orizzontalment, għaliex kull bżonnijiet ringiela
li jiġu kkupjati n darbiet.
>> Issa, hemm diversi differenti modi biex tagħmel dan.
Allura wieħed, nistgħu nużaw metodu jikteb, fl li aħna niftakru kollha tal-pixels
ta 'ringiela mogħtija fil-firxa, u allura aħna tikteb li array bħala
ħafna drabi kif meħtieġ.
Jew hemm il-metodu recopy fejn, wara l-qari f'ringiela waħda l infile
u mbagħad bil-miktub li fil-outfile, żżid l-ikkuttunar, aħna fseek
lura għall-bidu tal-filliera oriġinali, u mbagħad irrepeti l-orizzontali
resizing minn hemm.
Irrispettivament mill-metodu, għalkemm, inti ser tixtieq kull pixel li jiġu ripetuti
n darbiet, u kull ringiela li jkun n darbiet ripetut kif ukoll.
>> Ma 'dan, inti ser ikollok Bitmap akbar minn ħajja.
Jisimni Zamyla, u dan huwa CS50.