>> [Seinm ceoil]
>> ZAMYLA Chan: Bhí sé Miss Scarlett leis an candlestick.
Whodunit?
Bhuel, táimid ag dul chun a fháil amach.
Sa Leid cluiche boird, d'fhéadfadh tú a thabhairt íomhá dearg fisiciúil.
Agus is é sin an íomhá an-dearg agus spotty, agus tá do phost a
nochtann an teachtaireacht i bhfolach.
Agus de ghnáth go bhfuil tú ag fáil le dearg gloine formhéadúcháin, nó scáileán dearg a
nochtann teachtaireacht i bhfolach.
Bhuel, táimid ag dul chun mimic sin.
>> I whodunit, tá tú i thugtar íomhá bitmap go Breathnaíonn an-spotty agus dearg,
agus ansin rith an clár whodunit a nochtann teachtaireacht i bhfolach.
>> Mar sin, a ligean ar bhriseadh seo i céimeanna.
Gcéad dul síos, ba mhaith leat chun an comhad a oscailt - an clue go atá tú a bheith tugtha.
Agus ansin a chruthú chomh maith le comhad bitmap fíorasc.
Ansin ba mhaith leat a thabhairt cothrom le dáta ar an bitmap header eolas don comhbhrí fíorasc.
Níos mó ar sin ina dhiaidh.
Agus ansin tá tú ag dul a léamh ar an clue, scanline, picteilín ag picteilín,
athrú na dathanna picteilín mar is gá, agus scríobh
iad siúd isteach an fíorasc -
picteilín ag picteilín isteach scanline fíorasc.
>> Conas is féidir linn tús a chur ag dul faoi seo?
Bhuel, ámharaí an tsaoil, ní mór dúinn ní féidir dí sa chód dáilte.
Agus is é seo ag dul a chruthú úsáideach go leor a chur chugainn.
Osclaíonn ní féidir dí comhad, léann sa mhéid is go header infile, agus ansin suas chun dáta leis an
header comhbhrí ar.
Agus ansin léann sé gach picteilín san scanline, picteilín ag picteilín, agus ansin
scríobhann go picteilín isteach ar comhbhrí.
>> Mar sin, d'fhéadfadh do chéad chéim a bheith a reáchtáil ar an méid seo a leanas
ordú i gcríochfort -
cp ní féidir dí whodunit.c.
Beidh sé seo cóip de a chruthú ní féidir dí ainmnithe whodunit.c.
Mar sin, ár gcéad chéim a oscailt an comhad, go maith, níl a cruinn
macasamhail de sin i copy.c.
Mar sin, beidh mé a fhágann tú chun breathnú ar sin.
>> Cad tá muid ag déileáil leis sa PSET bhfuil comhad I / O, go bunúsach ag cur comhaid,
léitheoireacht, scríbhneoireacht, eagarthóireacht orthu.
Conas a dhéanann tú comhad a oscailt den chéad uair?
Bhuel, tá tú ag dul a dhearbhú comhad pointeoir, agus ansin a ghlaonn tú ar an
fopen feidhm.
Pas an cosán, nó ainm an comhad, agus ansin an modh gur mian leat
go comhad a oscailt isteach
Beidh Dul i r oscailt foo.bmp le haghaidh léamh.
De bharr an méid fopen le dul i w bheidh bar.bmp oscailte, do scríobh ar an gcomhad agus
i ndáiríre eagarthóireacht air.
>> Mar sin anois go atá againn d'oscail an comhad, ár Is é an chéad chéim eile ar an eolas header a thabhairt cothrom le dáta
don comhbhrí.
Cad is info header?
Bhuel, an chéad gá dúinn a fhios cad is bitmap.
Is bitmap ach simplí socrú na mbeart.
Agus tá siad a dhearbhú sa chomhad seo anseo, bmp.h, le bunch de
eolas ar cad a bitmap déanta go hiarbhír as.
Ach cad cúram againn i ndáiríre faoi go bhfuil an header comhad bitmap, ar dheis anseo, agus
an header info bitmap, thar anseo.
Tá an header comhdhéanta de cúpla athróg a chruthú an-úsáideach.
Tá biSizeImage, a bhfuil an méid iomlán an íomhá i bytes.
Agus folaíonn sé seo pixel agus stuála.
Tá Stuála an-tábhachtach, ach beidh orainn a fháil chun go níos déanaí.
>> Léiríonn BiWidth an leithead an íomhá i pixel lúide an stuáil.
Tá BiHeight ansin freisin an airde an íomhá i pixel.
Agus ansin an BITMAPFILEHEADER agus an BITMAPINFOHEADER, mar a luaigh mé
níos luaithe, tá ionadaíocht siúd mar structs.
Mar sin, ní féidir leat rochtain a fháil ar an header comhad féin, ach beidh tú ag iarraidh a fháil chun
na hathróga taobh istigh.
>> OK.
Mar sin, conas is féidir linn cothrom le dáta an eolas header?
Bhuel, ní mór dúinn an chéad a fheiceáil cé acu againn Ní mór a athrú aon fhaisnéis ó
an infile, an clue, chuig an ar comhbhrí, an fíorasc.
An bhfuil rud ar bith a athrú sa chás seo?
Bhuel, ní i ndáiríre, mar gheall ar táimid ag dul a bheith ag athrú ach na dathanna.
Níl muid ag dul a bheith ag athrú an comhad méid, an méid íomhá, an leithead,
nó an airde.
Mar sin, tá tú ceart go léir le haghaidh anois ag ach a chóipeáil ar gach picteilín.
>> OK.
Mar sin, anois a ligean ar breathnú ar conas againn i ndáiríre Is féidir le léamh gach picteilín as an comhad.
Comhad eile agam / feidhm O Beidh teacht i spraoi -
fread.
Bíonn sé i pointeoir chuig an struct Beidh go bhfuil an beart a
atá á léamh agat.
Mar sin, tá tú ag léamh isteach.
Agus ansin pas a fháil tú i méid, a bhfuil an méid de gach gné go bhfuil tú
ag iarraidh a léamh.
Anseo, is féidir MÉID an fheidhm Beidh teacht i handy.
Ansin éiríonn leat i líon, rud a Is ionann líon na n-eilimintí
méid a léamh.
Agus ansin ar deireadh, inptr, a bhfuil an pointeoir comhaid a bhfuil tú
ag dul a léamh ó.
Mar sin, tá gach ceann de na heilimintí taobh istigh inptr agus tá siad ag dul go dtí sonraí.
>> A ligean ar breathnú ar shampla beag.
Más mian liom a léamh i sonraí dhá madraí, maith, is féidir liom é a dhéanamh ar cheann de dhá bhealach.
Is féidir liom a léamh in dhá rudaí an méid madra ó mo inptr, nó is féidir liom a léamh
i gceann réad ar an méid de dhá madraí.
Mar sin, a fheiceann tú go bhfuil ag brath ar an mbealach go bhfuil tú socrú a méid agus líon, tú
Is féidir a léamh i líon céanna na mbeart.
>> Mar sin anois, a ligean ar athrú ar an dath picteilín mar is gá dúinn.
Má fhéachann tú ar bmp.h arís, ansin Feicfidh tú a fheiceáil go bhfuil ag bun
Tá RGBTRIPLEs struct eile, i gcás ina tá siad déanta suas de thrí bytes.
Amháin, rgbtBlue, rgbtGreen, agus rgbtRed.
Mar sin, is ionann gach ceann de na méid de gorm, an méid de glas, agus an
méid an dearg taobh istigh seo picteilín, i gcás ina Tá gach méid Domhanfhad ionadaíocht ag
uimhir heicsidheachúlach.
>> Mar sin, beidh ff0000 bheith ina dath gorm, mar go dtéann sé ó gorm,
go glas, go dearg.
Agus ansin beidh gach f a bheith bán.
A ligean ar ghlacadh le breathnú ar smiley.bmp, a tá tú i do chód dáilte.
Má osclaíonn tú é i díreach íomhá lucht féachana, ansin beidh tú
ach a fheiceáil smiley dearg.
Ach ag cur Léim níos doimhne i, beidh muid fheiceáil go bhfuil an struchtúr
de go bhfuil sé ach pixel.
Tá pixel bán, agus ansin pixel dearg.
An bán, FFFFFF, agus ansin gach ceann de na pixel dearg Tá mé daite i do shon
anseo, agus a fheiceann tú go bhfuil siad 0000ff.
Nialais gorm, glas náid, agus dearg iomlán.
Agus ós rud é smiley ocht pixel leathan, Ní dhéanaimid aon stuála.
Gach ceart.
>> Mar sin, má bhí mé a shannadh luachanna difriúla le RGBTRIPLE agus theastaigh uaim a
a dhéanamh glas é, ansin cad ba mhaith liom a dhéanamh ná Ba mhaith liom a dhearbhú go bhfuil RGBTRIPLE, ainmnithe
triple, agus ansin rochtain a fháil ar gach beart laistigh den struct mé
Bheadh ​​úsáid a bhaint as an t-oibreoir ponc.
Mar sin, triple.rgbtBlue, is féidir liom shannadh go dtí 0.
Glas is féidir liom é a shannadh go hiomlán - aon líon, i ndáiríre, idir 0 agus ina dhiaidh.
Agus ansin dearg, tá mé ag dul freisin a rá 0.
Mar sin, ansin tugann sin misneach picteilín glas.
>> Next, cad más mian liom a sheiceáil luach de rud éigin?
Raibh mé in ann a bheith rud éigin go seiceálacha cibé an bhfuil luach rgbtBlue an triple ar
ff agus ansin a phriontáil, "Tá mé ag mothú gorm! ", mar thoradh air.
Anois, ní chiallaíonn gur gá go bhfuil an picteilín gorm, ceart?
Toisc luachanna glas agus dearg ar an picteilín ar D'fhéadfadh a bheith neamh-0 luachanna chomh maith.
Gach go ciallaíonn sé seo, agus go léir go seo a sheiceáil le haghaidh tá
do dath gorm iomlán.
Ach d'fhéadfadh go léir a bheith páirteach freisin pixel Luachanna dath, mar seo
chéad sampla eile anseo.
>> Tá sé beagán níos deacra a fheiceáil cad é an íomhá seo anois.
Breathnaíonn sé seo beagán níos mó cosúil leis an clue.bmp go mbainfidh tú a thabhairt.
Anois, go fisiciúil, go dtiocfadh leat fhadhb seo, mar níl a lán de dearg, ag
a bhfuil suas le scáileán dearg ar an íomhá sin gur féidir leis na dathanna eile le feiceáil.
Mar sin, conas is féidir linn mimic seo le c?
Bhuel, d'fhéadfadh muid a bhaint go léir dearg ón íomhá go hiomlán.
Agus mar sin a dhéanamh gur mhaith linn a shocrú gach picteilín luach dearg go 0.
Agus mar sin go mbeadh an íomhá cuma beagán giotán mar seo, i gcás ina ní mór dúinn aon dearg
ar bith.
>> Is féidir linn a fheiceáil ar an teachtaireacht i bhfolach ar beagán níos soiléire anois.
Tá sé aghaidh smiley eile.
Nó b'fhéidir gur féidir linn a úsáid mhodh eile.
B'fhéidir, d'fhéadfadh muid a aithint gach ceann de na pixel dearg -
is é sin, gach ceann de na pixel le 0 gorm, glas 0, agus 0 dearg -
agus athrú sin go bán.
Agus d'fhéadfadh ár n-íomhá cuma rud éigin mar seo.
Tá beagán níos éasca a fheiceáil.
>> Tá go leor bealaí eile a uncover an teachtaireacht rúnda chomh maith,
déileáil leis an ionramháil dath.
B'fhéidir go dtiocfadh leat úsáid a bhaint as ceann de na modhanna gur luaigh mé thuas.
Agus chomh maith, b'fhéidir gur mhaith leat chun feabhas a chur ar roinnt dathanna
agus iad siúd a thabhairt amach.
>> Mar sin anois go atá againn d'athraigh an picteilín dath, eile is gá dúinn ach chun iad a scríobh
i do na scanline, picteilín ag picteilín.
Agus fós arís, beidh tú ag iarraidh chun breathnú ar ais a ní féidir dí, más rud é nach bhfuil tú ag chóipeáil
sé cheana féin, agus ag féachaint ar an fwrite fheidhm, a thógann sonraí, pointeoir
leis an struct go bhfuil an beart go bhfuil tú ag léamh as, ar an méid
na míreanna, líon na míreanna, agus ansin an outptr -
an ceann scríbe ar na comhaid sin.
>> Tar éis scríobhann tú ar an picteilíni, beidh tú freisin a scríobh sa stuáil.
Cad é stuáil?
Bhuel, gach picteilín rgbt Is trí bytes fada.
Ach, an scanline le haghaidh íomhá bitmap Tá a bheith iolraí de cheithre bytes.
Agus más rud é nach bhfuil an líon na n-pixel ar iolraí de cheithre, ansin is gá dúinn a chur leis
an stuáil.
Tá Stuála ach ionadaíocht ag 0s.
Mar sin, conas is féidir linn a scríobh, nó a léamh?
Bhuel, casadh sé amach nach féidir leat stuáil ndáiríre fread, ach is féidir leat
ríomh é.
>> Sa chás seo, an clue agus an fíorasc Tá an leithead céanna, mar sin an
Is stuáil mar an gcéanna.
Agus an stuáil, mar a mbainfidh tú a fheiceáil i ní féidir dí, a ríomh
leis an bhfoirmle thíos -
amanna bi.biWidth deachúlach (RGBTRIPLE) Beidh a thabhairt dúinn cé mhéad bytes an bmp
Tá i ngach ró.
Ó ann, an modulos agus subtractions le gur féidir 4 a ríomh cé
Ní mór go leor beart a chur leis ionas go an t-iolraí na mbeart ar
Tá gach as a chéile ceithre.
>> Anois go bhfuil muid ar an fhoirmle do cé mhéad is gá dúinn stuáil, anois
is féidir linn a scríobh sé.
Anois, luaigh mé cheana, Is stuáil ach 0s.
Mar sin, sa chás sin, tá muid ag cur go díreach ruabhric, sa chás seo 0, isteach inár
outptr - ár comhbhrí.
Mar sin, is féidir a bheith díreach fputc 0, camóg outptr.
>> Mar sin, cé go tá muid ag léamh isteach inár comhad, tá an comhad I / O choinnigh rian ar ár
seasamh sna comhaid le rud éigin ar a dtugtar an táscaire seasamh comhad.
Cuimhnigh ar sé mar cúrsóir.
Go bunúsach, dul chun cinn gach uair go fread againn, ach ní mór dúinn
rialú níos mó ná é, freisin.
>> Chun bogadh an táscaire seasamh comhad, Is féidir leat úsáid a bhaint as an fheidhm fseek.
I gcás ionann an inptr an comhad pointeoir go bhfuil tú ag lorg i, an
Is é méid líon na mbeart go bhfuil tú ag iarraidh a bogadh an cúrsóir, agus ansin ó
Baineann go dtí an pointe tagartha ó áit a bhfuil do cúrsóir.
Má éiríonn leat i SEEK_CUR, go Is ionann an láthair
seasamh sa chomhad.
Nó is féidir leat úsáid a bhaint as roinnt paraiméadair eile.
Mar sin, d'fhéadfadh muid ag iarraidh úsáid a bhaint as fseek a scipeáil thar an stuáil den chomhad i.
Agus arís, má tá tú bhfostú, níl sampla de sin i copy.c.
>> Mar sin, anois tá muid oscail an comhad, an clue, agus an fíorasc.
Táimid tar éis nuashonrú ar an eolas header do ár fíorasc, mar gheall ar gach
Ní mór bitmap header.
Táimid tar éis a léamh ansin isteach an leid ar scanline, picteilín ag picteilín, ag athrú
gach dath mar is gá, agus scríobh iad siúd isteach
fíorasc, picteilín ag picteilín.
Nuair a osclaíonn tú fíorasc, is féidir leat a fheiceáil atá an culprit, nó cad é an rún
Is é an teachtaireacht.
Is é mo ainm Zamyla, agus bhí sé seo whodunit.