>> [Tónlist spila]
>> ZAMYLA CHAN: blása skulum það upp með búa.
Í búa, the notandi vilja fara í, með stjórn lína, punktamynd mynd sem
þeir vilja að þú mælikvarði af mörgum að þeir fara líka í,
í stjórn lína.
Hvernig gerum við þetta?
>> Jæja, fyrst hlutur fyrstur, við skulum brjóta þetta niður í skrefum.
Þú ert að fara til að vilja opna INFILE að þeir gefa þér, eins og heilbrigður eins og
búa til og opna OUTFILE sem þú ert að fara að setja
búa ímynd inn
Þá, því að þú ert að breyta stærð, og því það er punktamynd, það haus, svo
þú ert að fara að einnig uppfæra haus upplýsingar fyrir OUTFILE,
og skrifa það inn
Þá ert þú að fara að lesa inn að scanline af INFILE,
pixla-fyrir-pixla, breyta stærð lárétt og skrifa þær punktar inn í
OUTFILE, eins og tilgreint eftir mælikvarða notandans.
>> Þú ert að fara að muna að bæta padding eins og þörf krefur.
Meira um það síðar.
Og þá, einnig búa lóðrétt.
OK.
Þannig að þetta er að fara til vera a lítill hluti fleiri flókið en hver gert það, en
hvað er svipað er að copy.c mun, aftur, sanna mjög gagnleg.
Mundu að copy.c opnar skrána, uppfærir hausinn upplýsingar fyrir
OUTFILE, þá les í scanline, pixla-fyrir-pixla, skrifa hvert pixla
í scanline the framleiðsla skrá er.
>> Svo aftur, gæti fyrsta skrefið sennilega vera að CP, copy.c, resize.c
í PSET5 möppuna.
Mundu þó, áður en þú afritað það, að ganga úr skugga um að þú skiljir
copy.c mjög rækilega.
OK.
>> Svo skulum opna skrá.
Þú veist hvernig á að gera það.
Ég ætla að yfirgefa það fyrir þig.
Næst skaltu uppfæra haus fyrir OUTFILE.
Vegna þess að við höfum nýja punktamynd, við höfum nýja haus upplýsingar.
Hvað er að breytast hér?
Jæja, the skrá stærð er að fara að breyta vegna þess að við erum að fara að hafa meira
punktar en áður.
Stærð mynda er, svona, einnig að fara að breyta, eins og er
breidd og hæð.
>> Svo sem breytur eru þeir, nákvæmlega?
Jæja, ef þú lítur inn í haus upplýsingar, sjá þig það er
biSizeImage, sem táknar samtals stærð myndarinnar í bætum,
þ.mt punkta og padding.
biWidth er breidd myndarinnar í dílar, mínus padding.
biHeight er hæð myndarinnar í punktum.
Og svo þeir eru að finna í structs BITMAPFILEHEADER og
BITMAPINFOHEADER.
Þú getur sagt hver einn er hver með fara að bmp.h og horfir á
BITMAPINFOHEADER strúktúr og sjá sem breytur eru skráð þar.
>> Svo til að uppfæra outfiles haus upplýsingar, þú ert að fara til að vilja
breyta þeim gildum sem hæð og breidd.
En líkurnar eru, þú gætir þurft nokkur á haus í INFILE er
síðar, þannig best að halda utan um bæði.
En vera mjög skýr með þínu breyta nöfn svo að þú gerir ekki óvart
skrifa rangt gildi í haus fyrir OUTFILE.
>> Svo nú skulum við fá að lesa inn að scanline pixla-við-pixla.
Aftur erum við að fara að snúa sér til traustur okkar skrá I / O bókasafn og líta á
á fread virka.
fread tekur í bendi til strúktúrinn sem mun innihalda bæti sem
þú ert að lesa í, stærð hvers þáttur sem þú ert að lesa -
aftur, sizeof er að fara að vera gagnlegt virka hér, fjölda af
þættir stærð, stærð, sem þú ert lesa í, og síðan að lokum,
inpointer, skrá sem þú ert að lesa úr.
Svo þú ert að taka númer þætti af stærð frá inpointer og
setja þau í gögnum.
>> Nú er kominn tími til að búa lárétt.
ef n er jafnt 2, þá fyrir hvern pixla í á INFILE, við erum að fara að skrifa það
tvisvar í OUTFILE.
Hvernig eigum við að skrifa skrá?
Jæja, höfum við fwrite virka, svo við höfum tekið bendi á strúktúrinn
sem inniheldur bytes sem þú ert að skrifa frá, og þá erum við að gefa í
stærð, númer og framleiðsla, þar þú ert að fara að vera að skrifa það.
Og þá til að endurtaka ferlið, verður fær einfalt endurtekningu til hliðar.
>> En við þurfum að muna að bæta padding inn
Hugmyndin um padding er að vel Hver pixla er þrjú bit, en
stærð hvers scanline Verða vera margfeldi af 4 bæti.
Þannig að ef fjöldi punkta er ekki margfeldi af 4, þurfum við að bæta við nokkrum
padding, sem er bara zeroes.
Nú, ólíkt Hver gert það, og ólíkt afrita, þá INFILE ímynd og
OUTFILE skrá hafa öðruvísi hafa mismunandi padding því þeir eru
mismunandi breiddum.
>> OK.
Svo kannski uppskrift vildi koma sér vel hér.
Ég skal fara með það til þín til að finna það út, en segja þér það, að skrifa padding,
Jæja, það er bara einfalt fputc virka, liggur í eðli
sem þú vilt að skrifa, og þá skráin músina sem þú
langar að skrifa til.
Svo nú er að við höfum breytt lárétt, og síðan notað padding,
mundu að þú þarft að færa skrá þína stöðu vísir, því þú
getur ekki fread inn padding.
Svo þú vilja til vera viss um að skrá staða vísir í INFILE
er í réttum stað.
Vegna þess að við viljum líka að búa lóðrétt.
Við getum ekki bara teygja það lárétt, vegna þess að sérhver röð þarfir
að afrita n sinnum.
>> Nú, það eru nokkrir mismunandi leiðir til að gera þetta.
Svo einn, getum við notað umrita aðferð, í að við muna öll dílar
af tiltekinni röð í fylki, og þá erum við að skrifa þessi fylking sem
oft og þörf krefur.
Eða það er recopy aðferð þar, eftir að hafa lesið í eina röð í INFILE
og þá skrifa það inn í the OUTFILE, bæta padding, fseek við
aftur til the byrjun af upprunalegri röð, og þá endurtaka lárétt
resizing þaðan.
Óháð því hvaða aðferð, þó, þú munt vil að allir punkta til að endurtaka
n sinnum, og í hvert róður að vera endurtekin n sinnum eins vel.
>> Með þessi, munt þú hafa punktamynd stærri en lífið.
Mitt nafn er Zamyla, og þetta er CS50.