>> [Music kucheza]
>> Rob BOWDEN: Hi.
Mimi nina Rob na hebu ukubwa juu ya tatizo hili.
Hivyo sisi ni kwenda kuanza na copy.c kama template, lakini tunakwenda kuwa na
kufanya kabisa mabadiliko kadhaa.
>> Sasa tunaona sisi ni mara moja kufanya kubadili ambapo sisi ni tena kuangalia
kwa rxc yetu haina sawa 3, lakini sasa sisi ni kuangalia rc haina sawa 4.
Tangu sisi pia wanataka kwa pamoja, katika Mbali na katika faili na nje files
hoja, f ambayo ni kwenda kuwa hii sababu ambayo sisi ni kuongeza.
>> Hivyo mara moja sisi ni kuhakikisha ya kwamba, tunataka kutumia s Scan f kubadili string
argv1 kwa kuelea.
Na sisi ni kwenda kuhifadhi kwamba katika sababu.
Tabia hii ya ziada ni kuhakikisha kwamba sisi si kweli kuingia
kitu kama 1.4 ABC katika mstari amri.
>> Sasa tunakwenda kujenga baadhi ya Majina bandia tangu RV2 na RV3 ni si
manufaa sana majina.
Sisi ni, badala yake, kwenda kuwaita yao katika faili na nje file.
Sasa tunakwenda kuhakikisha kwamba sababu yetu ilikuwa kweli halali.
Hivyo kama sababu ni chini ya au sawa na zero au zaidi ya 100, basi kama kwa
spec, tunapaswa kukataa kuwa sababu.
>> Wakati sisi ni uhakika ni nzuri, sasa tunaweza kufungua n faili, na sisi kufanya
kuhakikisha kwamba mara kwa mafanikio kufunguliwa.
Kama ni hivyo, kwamba atarudi null.
Sisi ni kwenda kufungua nje file.
Na tena, tunataka kuangalia kwa kufanya uhakika ni mafanikio kufunguliwa.
Na kama hakuwa na mafanikio ya wazi, kisha sisi pia haja ya kuwa na uhakika wa karibu
n file ambayo awali mafanikio kufunguliwa, au pengine tuna
kumbukumbu leak.
>> Hivyo sasa sisi ni kwenda kusoma katika bitmap file header na bitmap info
header kutoka n file.
Tunakwenda kuhakikisha kwamba n faili ni bitmap halali.
OK.
>> Hivyo sasa sisi ni kwenda kuanza kufanya baadhi ya mabadiliko.
Basi, kwa sababu sisi ni kwenda kuwa kubadilisha mambo, sisi kwanza wanataka kukumbuka
umri wa upana wa n file.
Tunataka kumbuka umri wa padding ya n faili kwa kutumia hesabu sawa
kutoka copy.c.
>> Na sasa sisi ni kwenda na mabadiliko bitmap info header.
Na hivyo sisi ni kuzidisha wote upana na urefu kwa sababu tangu
kwamba ni nini sisi ni kuongeza kwa.
Tunakwenda kuamua padding mpya ya faili na
kutumia upana mpya.
Na sisi ni kwenda kuamua mpya ukubwa wa picha kwa kutumia idadi ya
ka katika safu moja ambayo ni kwenda kuwa idadi ya pixels katika mstari kwamba
mara ukubwa wa pixel pamoja na idadi ya ka ya padding mwishoni
ya mstari kwamba, na kuzidisha yote na idadi ya mistari kwamba tuna.
Hivyo kwamba ni idadi ya ka tuna katika data yetu ya picha.
>> Bf.Bfsize sasa ni kwenda kuwa idadi ya ka kwa mfano beta yetu pamoja na
ukubwa wa headers yetu.
Hivyo pamoja na ukubwa wa faili bitmap header na ukubwa wa bitmap info header.
OK.
Hivyo hiyo ni kwa headers yetu.
Tunaweza kuandika kwenye faili kichwa na info header kwa nje yetu
faili, na sisi ni nzuri.
>> Sasa ni wakati wa kuanza kweli kuandika pixel
data kwa nje file.
Sisi ni kwenda kutangaza buffer ya ukubwa miaka upana RGB triples, na sisi ni
kwenda kutangaza variable kuitwa mstari numb, ambayo ni tunakwenda
awali kuweka sawa na hasi 1.
Tutaweza kuona kwamba tunakwenda kutumia kwamba ili kuweka wimbo wa nini
mstari sisi sasa kuwa kubeba ndani ya buffer hii.
OK.
>> Hivyo sasa tofauti na toleo la kawaida, badala ya iterating juu katika katika
file, tunakwenda iterate juu ya kila mfululizo katika file nje na kufikiri
ambayo mfululizo katika file katika tunataka mahali katika safu hii katika nje file.
Hivyo iterating juu ya safu zote katika nje faili kwa kutumia urefu mpya, sisi ni kwanza
kwenda kuamua mfululizo katika miaka faili tunakwenda kutumia, ambayo sisi ni
kwenda kufanya kwa kuchukua sasa hii mstari kugawanywa na sababu.
Ili kwenda kutupa mstari katika umri wa faili kwamba tunataka.
>> Hivyo sasa kama mstari numb haina sawa na umri wa y, tunakwenda na kusoma mstari
kwamba tunataka katika cur yetu mstari buffer.
Hivyo ni jinsi sisi ni kwenda kufanya hivyo?
Kwanza, tunakwenda kufikiri nafasi hiyo huanza mstari kwamba katika
file awali.
Hivyo nafasi kwamba ni kwenda kuwa siku za nyuma zote za headers yetu na
zimepita umri wa y mistari.
>> Na hivyo ni jinsi gani ka wengi ni katika safu moja?
Tena, mwenye umri wa ukubwa wa RGB mara tatu upana pamoja na padding zamani, hivyo kwamba
idadi ya ka katika safu moja.
Na tunataka ruka zamani wa zamani y mistari.
Hivyo sisi ni kwenda kwa f kutafuta na sisi ni kutumia kutafuta kuweka kuanza kutoka
mwanzo wa file.
Tunakwenda f kutafuta nafasi hii katika faili, kuweka sisi katika
mwanzo wa mstari tunataka kusoma katika buffer yetu.
>> Sisi ni kwenda kuweka mstari numb sawa na umri y.
Hivyo sasa kama sisi kitanzi nyuma na tunataka kutumia safu hii moja katika faili wetu nje,
kisha sisi siyo kwenda kusoma katika tena usiokuwa.
Hivyo kweli, mstari numb ni tu optimization.
>> Hatimaye, tunakwenda kusoma katika mstari sasa miaka upana RGB triples
kwamba tunataka kutoka faili ya awali.
Hivyo sasa mstari cur ina saizi kutoka faili ya awali kwamba tunataka
kuandika katika nje file.
Basi sasa, kama vile hapo juu, badala ya iterating juu ya file zamani, tunahitaji
kwa iterate juu ya faili jipya safu.
Vizuri hapa, badala ya iterating juu ya yote ya saizi ya zamani ambayo katika cur mstari,
tunataka iterate juu ya yote ya saizi katika faili wetu mpya katika hii
hasa mfululizo.
>> Kwa nini tunataka kufanya hivyo?
Kwa sababu tunaona hapa kwamba sisi siyo kweli lazima kutumia yote ya
saizi katika faili ya awali.
Kwa sababu kama sisi ni kushuka, tupate kweli wanataka ruka saizi.
Na sisi kuona kwamba hii -
x kugawanywa kwa sababu -
karibu vioo hapa ambapo sisi kusema y kugawanywa kwa sababu kufikiri kwamba
y-th miaka mstari sambamba na y-th mfululizo katika faili hii mpya.
>> Sasa sisi ni kwenda kuandika yote ya saizi hizi kutoka mstari wa zamani
katika mstari wetu mpya.
Mara baada ya tumefanya hivyo, tunahitaji tu kuweka padding mwishoni mwa mstari yetu
na tutaweza kitanzi nyuma na kuendelea kwa yote ya safu katika faili wetu mpya.
Mwishoni, tunahitaji kuifunga wazee wetu faili, karibu faili wetu mpya, na kurudi
zero kwa sababu kila kitu akaenda faini.
>> Jina langu ni Rob na hii ilikuwa mapumziko.
>> [Music kucheza]