[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]