1 00:00:00,000 --> 00:00:00,996 2 00:00:00,996 --> 00:00:12,470 >> [Music kucheza] 3 00:00:12,470 --> 00:00:13,210 >> Rob BOWDEN: Hi. 4 00:00:13,210 --> 00:00:16,870 Mimi nina Rob na hebu ukubwa juu ya tatizo hili. 5 00:00:16,870 --> 00:00:20,990 Hivyo sisi ni kwenda kuanza na copy.c kama template, lakini tunakwenda kuwa na 6 00:00:20,990 --> 00:00:23,340 kufanya kabisa mabadiliko kadhaa. 7 00:00:23,340 --> 00:00:27,570 >> Sasa tunaona sisi ni mara moja kufanya kubadili ambapo sisi ni tena kuangalia 8 00:00:27,570 --> 00:00:31,560 kwa rxc yetu haina sawa 3, lakini sasa sisi ni kuangalia rc haina sawa 4. 9 00:00:31,560 --> 00:00:34,670 Tangu sisi pia wanataka kwa pamoja, katika Mbali na katika faili na nje files 10 00:00:34,670 --> 00:00:39,550 hoja, f ambayo ni kwenda kuwa hii sababu ambayo sisi ni kuongeza. 11 00:00:39,550 --> 00:00:45,430 >> Hivyo mara moja sisi ni kuhakikisha ya kwamba, tunataka kutumia s Scan f kubadili string 12 00:00:45,430 --> 00:00:49,030 argv1 kwa kuelea. 13 00:00:49,030 --> 00:00:51,330 Na sisi ni kwenda kuhifadhi kwamba katika sababu. 14 00:00:51,330 --> 00:00:55,180 Tabia hii ya ziada ni kuhakikisha kwamba sisi si kweli kuingia 15 00:00:55,180 --> 00:00:59,200 kitu kama 1.4 ABC katika mstari amri. 16 00:00:59,200 --> 00:01:02,960 >> Sasa tunakwenda kujenga baadhi ya Majina bandia tangu RV2 na RV3 ni si 17 00:01:02,960 --> 00:01:04,310 manufaa sana majina. 18 00:01:04,310 --> 00:01:07,660 Sisi ni, badala yake, kwenda kuwaita yao katika faili na nje file. 19 00:01:07,660 --> 00:01:11,580 Sasa tunakwenda kuhakikisha kwamba sababu yetu ilikuwa kweli halali. 20 00:01:11,580 --> 00:01:16,330 Hivyo kama sababu ni chini ya au sawa na zero au zaidi ya 100, basi kama kwa 21 00:01:16,330 --> 00:01:19,660 spec, tunapaswa kukataa kuwa sababu. 22 00:01:19,660 --> 00:01:23,890 >> Wakati sisi ni uhakika ni nzuri, sasa tunaweza kufungua n faili, na sisi kufanya 23 00:01:23,890 --> 00:01:25,950 kuhakikisha kwamba mara kwa mafanikio kufunguliwa. 24 00:01:25,950 --> 00:01:28,630 Kama ni hivyo, kwamba atarudi null. 25 00:01:28,630 --> 00:01:30,390 Sisi ni kwenda kufungua nje file. 26 00:01:30,390 --> 00:01:33,420 Na tena, tunataka kuangalia kwa kufanya uhakika ni mafanikio kufunguliwa. 27 00:01:33,420 --> 00:01:37,270 Na kama hakuwa na mafanikio ya wazi, kisha sisi pia haja ya kuwa na uhakika wa karibu 28 00:01:37,270 --> 00:01:40,870 n file ambayo awali mafanikio kufunguliwa, au pengine tuna 29 00:01:40,870 --> 00:01:42,600 kumbukumbu leak. 30 00:01:42,600 --> 00:01:46,350 >> Hivyo sasa sisi ni kwenda kusoma katika bitmap file header na bitmap info 31 00:01:46,350 --> 00:01:48,890 header kutoka n file. 32 00:01:48,890 --> 00:01:52,360 Tunakwenda kuhakikisha kwamba n faili ni bitmap halali. 33 00:01:52,360 --> 00:01:52,640 OK. 34 00:01:52,640 --> 00:01:55,100 >> Hivyo sasa sisi ni kwenda kuanza kufanya baadhi ya mabadiliko. 35 00:01:55,100 --> 00:01:58,840 Basi, kwa sababu sisi ni kwenda kuwa kubadilisha mambo, sisi kwanza wanataka kukumbuka 36 00:01:58,840 --> 00:02:01,510 umri wa upana wa n file. 37 00:02:01,510 --> 00:02:05,160 Tunataka kumbuka umri wa padding ya n faili kwa kutumia hesabu sawa 38 00:02:05,160 --> 00:02:06,990 kutoka copy.c. 39 00:02:06,990 --> 00:02:09,840 >> Na sasa sisi ni kwenda na mabadiliko bitmap info header. 40 00:02:09,840 --> 00:02:13,630 Na hivyo sisi ni kuzidisha wote upana na urefu kwa sababu tangu 41 00:02:13,630 --> 00:02:15,750 kwamba ni nini sisi ni kuongeza kwa. 42 00:02:15,750 --> 00:02:18,420 Tunakwenda kuamua padding mpya ya faili na 43 00:02:18,420 --> 00:02:21,140 kutumia upana mpya. 44 00:02:21,140 --> 00:02:27,330 Na sisi ni kwenda kuamua mpya ukubwa wa picha kwa kutumia idadi ya 45 00:02:27,330 --> 00:02:31,610 ka katika safu moja ambayo ni kwenda kuwa idadi ya pixels katika mstari kwamba 46 00:02:31,610 --> 00:02:35,960 mara ukubwa wa pixel pamoja na idadi ya ka ya padding mwishoni 47 00:02:35,960 --> 00:02:40,310 ya mstari kwamba, na kuzidisha yote na idadi ya mistari kwamba tuna. 48 00:02:40,310 --> 00:02:43,800 Hivyo kwamba ni idadi ya ka tuna katika data yetu ya picha. 49 00:02:43,800 --> 00:02:48,190 >> Bf.Bfsize sasa ni kwenda kuwa idadi ya ka kwa mfano beta yetu pamoja na 50 00:02:48,190 --> 00:02:49,350 ukubwa wa headers yetu. 51 00:02:49,350 --> 00:02:53,910 Hivyo pamoja na ukubwa wa faili bitmap header na ukubwa wa bitmap info header. 52 00:02:53,910 --> 00:02:54,510 OK. 53 00:02:54,510 --> 00:02:56,440 Hivyo hiyo ni kwa headers yetu. 54 00:02:56,440 --> 00:02:59,030 Tunaweza kuandika kwenye faili kichwa na info header kwa nje yetu 55 00:02:59,030 --> 00:03:01,590 faili, na sisi ni nzuri. 56 00:03:01,590 --> 00:03:03,800 >> Sasa ni wakati wa kuanza kweli kuandika pixel 57 00:03:03,800 --> 00:03:05,120 data kwa nje file. 58 00:03:05,120 --> 00:03:10,460 Sisi ni kwenda kutangaza buffer ya ukubwa miaka upana RGB triples, na sisi ni 59 00:03:10,460 --> 00:03:13,790 kwenda kutangaza variable kuitwa mstari numb, ambayo ni tunakwenda 60 00:03:13,790 --> 00:03:15,640 awali kuweka sawa na hasi 1. 61 00:03:15,640 --> 00:03:19,090 Tutaweza kuona kwamba tunakwenda kutumia kwamba ili kuweka wimbo wa nini 62 00:03:19,090 --> 00:03:22,640 mstari sisi sasa kuwa kubeba ndani ya buffer hii. 63 00:03:22,640 --> 00:03:23,290 OK. 64 00:03:23,290 --> 00:03:28,750 >> Hivyo sasa tofauti na toleo la kawaida, badala ya iterating juu katika katika 65 00:03:28,750 --> 00:03:32,900 file, tunakwenda iterate juu ya kila mfululizo katika file nje na kufikiri 66 00:03:32,900 --> 00:03:38,130 ambayo mfululizo katika file katika tunataka mahali katika safu hii katika nje file. 67 00:03:38,130 --> 00:03:44,930 Hivyo iterating juu ya safu zote katika nje faili kwa kutumia urefu mpya, sisi ni kwanza 68 00:03:44,930 --> 00:03:48,890 kwenda kuamua mfululizo katika miaka faili tunakwenda kutumia, ambayo sisi ni 69 00:03:48,890 --> 00:03:53,560 kwenda kufanya kwa kuchukua sasa hii mstari kugawanywa na sababu. 70 00:03:53,560 --> 00:03:58,000 Ili kwenda kutupa mstari katika umri wa faili kwamba tunataka. 71 00:03:58,000 --> 00:04:03,310 >> Hivyo sasa kama mstari numb haina sawa na umri wa y, tunakwenda na kusoma mstari 72 00:04:03,310 --> 00:04:05,940 kwamba tunataka katika cur yetu mstari buffer. 73 00:04:05,940 --> 00:04:07,700 Hivyo ni jinsi sisi ni kwenda kufanya hivyo? 74 00:04:07,700 --> 00:04:11,650 Kwanza, tunakwenda kufikiri nafasi hiyo huanza mstari kwamba katika 75 00:04:11,650 --> 00:04:13,100 file awali. 76 00:04:13,100 --> 00:04:18,630 Hivyo nafasi kwamba ni kwenda kuwa siku za nyuma zote za headers yetu na 77 00:04:18,630 --> 00:04:21,589 zimepita umri wa y mistari. 78 00:04:21,589 --> 00:04:23,880 >> Na hivyo ni jinsi gani ka wengi ni katika safu moja? 79 00:04:23,880 --> 00:04:28,740 Tena, mwenye umri wa ukubwa wa RGB mara tatu upana pamoja na padding zamani, hivyo kwamba 80 00:04:28,740 --> 00:04:30,640 idadi ya ka katika safu moja. 81 00:04:30,640 --> 00:04:33,680 Na tunataka ruka zamani wa zamani y mistari. 82 00:04:33,680 --> 00:04:37,580 Hivyo sisi ni kwenda kwa f kutafuta na sisi ni kutumia kutafuta kuweka kuanza kutoka 83 00:04:37,580 --> 00:04:39,100 mwanzo wa file. 84 00:04:39,100 --> 00:04:42,740 Tunakwenda f kutafuta nafasi hii katika faili, kuweka sisi katika 85 00:04:42,740 --> 00:04:46,500 mwanzo wa mstari tunataka kusoma katika buffer yetu. 86 00:04:46,500 --> 00:04:48,510 >> Sisi ni kwenda kuweka mstari numb sawa na umri y. 87 00:04:48,510 --> 00:04:53,080 Hivyo sasa kama sisi kitanzi nyuma na tunataka kutumia safu hii moja katika faili wetu nje, 88 00:04:53,080 --> 00:04:55,970 kisha sisi siyo kwenda kusoma katika tena usiokuwa. 89 00:04:55,970 --> 00:04:59,310 Hivyo kweli, mstari numb ni tu optimization. 90 00:04:59,310 --> 00:05:05,500 >> Hatimaye, tunakwenda kusoma katika mstari sasa miaka upana RGB triples 91 00:05:05,500 --> 00:05:08,040 kwamba tunataka kutoka faili ya awali. 92 00:05:08,040 --> 00:05:12,270 Hivyo sasa mstari cur ina saizi kutoka faili ya awali kwamba tunataka 93 00:05:12,270 --> 00:05:14,200 kuandika katika nje file. 94 00:05:14,200 --> 00:05:18,960 Basi sasa, kama vile hapo juu, badala ya iterating juu ya file zamani, tunahitaji 95 00:05:18,960 --> 00:05:22,560 kwa iterate juu ya faili jipya safu. 96 00:05:22,560 --> 00:05:27,450 Vizuri hapa, badala ya iterating juu ya yote ya saizi ya zamani ambayo katika cur mstari, 97 00:05:27,450 --> 00:05:31,210 tunataka iterate juu ya yote ya saizi katika faili wetu mpya katika hii 98 00:05:31,210 --> 00:05:32,480 hasa mfululizo. 99 00:05:32,480 --> 00:05:34,140 >> Kwa nini tunataka kufanya hivyo? 100 00:05:34,140 --> 00:05:38,960 Kwa sababu tunaona hapa kwamba sisi siyo kweli lazima kutumia yote ya 101 00:05:38,960 --> 00:05:41,020 saizi katika faili ya awali. 102 00:05:41,020 --> 00:05:46,630 Kwa sababu kama sisi ni kushuka, tupate kweli wanataka ruka saizi. 103 00:05:46,630 --> 00:05:48,090 Na sisi kuona kwamba hii - 104 00:05:48,090 --> 00:05:49,690 x kugawanywa kwa sababu - 105 00:05:49,690 --> 00:05:55,620 karibu vioo hapa ambapo sisi kusema y kugawanywa kwa sababu kufikiri kwamba 106 00:05:55,620 --> 00:06:02,480 y-th miaka mstari sambamba na y-th mfululizo katika faili hii mpya. 107 00:06:02,480 --> 00:06:05,880 >> Sasa sisi ni kwenda kuandika yote ya saizi hizi kutoka mstari wa zamani 108 00:06:05,880 --> 00:06:07,440 katika mstari wetu mpya. 109 00:06:07,440 --> 00:06:10,890 Mara baada ya tumefanya hivyo, tunahitaji tu kuweka padding mwishoni mwa mstari yetu 110 00:06:10,890 --> 00:06:15,540 na tutaweza kitanzi nyuma na kuendelea kwa yote ya safu katika faili wetu mpya. 111 00:06:15,540 --> 00:06:19,390 Mwishoni, tunahitaji kuifunga wazee wetu faili, karibu faili wetu mpya, na kurudi 112 00:06:19,390 --> 00:06:21,540 zero kwa sababu kila kitu akaenda faini. 113 00:06:21,540 --> 00:06:24,220 >> Jina langu ni Rob na hii ilikuwa mapumziko. 114 00:06:24,220 --> 00:06:29,184 >> [Music kucheza]