1 00:00:00,000 --> 00:00:00,996 2 00:00:00,996 --> 00:00:12,470 >> [CHWARAE CERDDORIAETH] 3 00:00:12,470 --> 00:00:13,210 >> ROB BOWDEN: Hi. 4 00:00:13,210 --> 00:00:16,870 Rwy'n Rob a gadewch i ni maint i fyny y broblem hon. 5 00:00:16,870 --> 00:00:20,990 Felly, rydym yn mynd i ddechrau gyda copy.c fel templed, ond yr ydym yn mynd i fod 6 00:00:20,990 --> 00:00:23,340 gwneud yn eithaf ychydig o newidiadau. 7 00:00:23,340 --> 00:00:27,570 >> Nawr rydym yn gweld ein bod yn gwneud unwaith newid lle'r ydym yn bellach yn gwirio 8 00:00:27,570 --> 00:00:31,560 am nad yw ein RXC yn gyfartal 3, ond erbyn hyn nid ydym yn gwirio rc yn gyfartal 4. 9 00:00:31,560 --> 00:00:34,670 Ers i ni hefyd yn awyddus i gynnwys, yn ychwanegol at y yn y ffeil ac allan ffeiliau 10 00:00:34,670 --> 00:00:39,550 dadleuon, f sydd yn mynd i fod yn hyn ffactor y mae rydym yn dringo. 11 00:00:39,550 --> 00:00:45,430 >> Felly, unwaith rydym yn sicr o hynny, rydym am defnyddio s sgan f i drawsnewid y llinyn 12 00:00:45,430 --> 00:00:49,030 argv1 i arnofio. 13 00:00:49,030 --> 00:00:51,330 Ac rydym yn mynd i storio hynny yn ffactor. 14 00:00:51,330 --> 00:00:55,180 Mae'r cymeriad ychwanegol yn gwneud yn siŵr nad ydym mewn gwirionedd yn mynd i mewn i 15 00:00:55,180 --> 00:00:59,200 rhywbeth fel 1.4 ABC ar y llinell orchymyn. 16 00:00:59,200 --> 00:01:02,960 >> Nawr rydym yn mynd i greu rhai enwau eraill gan nad RV2 a RV3 yn 17 00:01:02,960 --> 00:01:04,310 enwau yn ddefnyddiol iawn. 18 00:01:04,310 --> 00:01:07,660 Rydym yn, yn lle hynny, yn mynd i alw nhw yn y ffeil ac allan ffeil. 19 00:01:07,660 --> 00:01:11,580 Nawr rydym yn mynd i wneud yn siŵr bod ein ffactor oedd mewn gwirionedd yn ddilys. 20 00:01:11,580 --> 00:01:16,330 Felly os ffactor yn llai na neu'n hafal i sero neu fwy na 100, yna fel y 21 00:01:16,330 --> 00:01:19,660 y fanyleb, dylem wrthod y ffactor hwnnw. 22 00:01:19,660 --> 00:01:23,890 >> Pan fyddwn yn sicr ei fod yn dda, yn awr rydym yn gallu agor y ffeil n, ac mae'n rhaid i ni wneud 23 00:01:23,890 --> 00:01:25,950 sicrhau ei fod yn cael ei agor yn llwyddiannus. 24 00:01:25,950 --> 00:01:28,630 Os nad oedd, a fydd yn dychwelyd null. 25 00:01:28,630 --> 00:01:30,390 Rydym yn mynd i agor y ffeiliau y tu allan. 26 00:01:30,390 --> 00:01:33,420 Ac eto, rydym am i wirio i wneud siŵr ei fod yn agor yn llwyddiannus. 27 00:01:33,420 --> 00:01:37,270 Ac os nad oedd yn agor yn llwyddiannus, yna Mae angen i ni hefyd fod yn sicr i gau 28 00:01:37,270 --> 00:01:40,870 y ffeil n oedd yn wreiddiol yn llwyddo i agor, neu fel arall mae gennym 29 00:01:40,870 --> 00:01:42,600 gollwng cof. 30 00:01:42,600 --> 00:01:46,350 >> Felly nawr rydym yn mynd i ddarllen yn y didfap header ffeiliau a gwybodaeth didfap 31 00:01:46,350 --> 00:01:48,890 header o'r ffeil n. 32 00:01:48,890 --> 00:01:52,360 Rydym yn mynd i wneud yn siŵr bod y n y ffeil yn didfap dilys. 33 00:01:52,360 --> 00:01:52,640 OK. 34 00:01:52,640 --> 00:01:55,100 >> Felly nawr rydym yn mynd i ddechrau gwneud rhai newidiadau. 35 00:01:55,100 --> 00:01:58,840 Felly, oherwydd ein bod yn mynd i fod yn newid pethau, rydym yn gyntaf am gofio'r 36 00:01:58,840 --> 00:02:01,510 hen lled y ffeil n. 37 00:02:01,510 --> 00:02:05,160 Rydym eisiau cofio yr hen padin o y ffeil n gan ddefnyddio'r un cyfrifiad 38 00:02:05,160 --> 00:02:06,990 o copy.c. 39 00:02:06,990 --> 00:02:09,840 >> Ac yn awr rydym yn mynd i newid y pennawd gwybodaeth didfap. 40 00:02:09,840 --> 00:02:13,630 Ac felly rydym yn lluosi y lled ac uchder gan ffactor ers 41 00:02:13,630 --> 00:02:15,750 dyna beth rydym yn dringo heibio. 42 00:02:15,750 --> 00:02:18,420 Rydym yn mynd i benderfynu ar y padin newydd y ffeil drwy 43 00:02:18,420 --> 00:02:21,140 gan ddefnyddio'r lled newydd. 44 00:02:21,140 --> 00:02:27,330 Ac rydym yn mynd i benderfynu ar y newydd maint y ddelwedd gan ddefnyddio nifer o 45 00:02:27,330 --> 00:02:31,610 bytes mewn rhes sengl sy'n mynd i fod nifer y picsel yn y rhes 46 00:02:31,610 --> 00:02:35,960 gwaith maint picsel yn ogystal â'r nifer o bytes o padin ar y diwedd 47 00:02:35,960 --> 00:02:40,310 y rhes, a lluosi'r bob un sy'n gan y nifer o resi sydd gennym. 48 00:02:40,310 --> 00:02:43,800 Felly dyna y nifer o bytes gennym yn ein data ddelwedd. 49 00:02:43,800 --> 00:02:48,190 >> Bf.Bfsize yn awr yn mynd i fod yn y nifer o bytes yn ein delwedd beta yn ogystal â 50 00:02:48,190 --> 00:02:49,350 maint ein penawdau. 51 00:02:49,350 --> 00:02:53,910 Felly, yn ogystal â maint y pennawd ffeil bitmap a maint y pennawd gwybodaeth didfap. 52 00:02:53,910 --> 00:02:54,510 OK. 53 00:02:54,510 --> 00:02:56,440 Felly dyna ni ar gyfer ein penawdau. 54 00:02:56,440 --> 00:02:59,030 Gallwn ysgrifennu'r pen ffeiliau a info pennawd i'n allan 55 00:02:59,030 --> 00:03:01,590 ffeilio, ac rydym yn dda. 56 00:03:01,590 --> 00:03:03,800 >> Nawr mae'n amser i ddechrau mewn gwirionedd ysgrifennu'r picsel 57 00:03:03,800 --> 00:03:05,120 data i'r ffeiliau y tu allan. 58 00:03:05,120 --> 00:03:10,460 Rydym yn mynd i ddatgan clustog o faint hen lled RGB treblu'r, ac rydym yn 59 00:03:10,460 --> 00:03:13,790 mynd i ddatgan newidyn a elwir yn ddideimlad rhes, sef ein bod yn mynd i 60 00:03:13,790 --> 00:03:15,640 gosod cyfartal i negyddol 1 yn y lle cyntaf. 61 00:03:15,640 --> 00:03:19,090 Byddwn yn gweld ein bod yn mynd i fod yn defnyddio er mwyn cadw golwg ar yr hyn 62 00:03:19,090 --> 00:03:22,640 rhes rydym wedi llwytho ar hyn o bryd i'r byffer hwn. 63 00:03:22,640 --> 00:03:23,290 OK. 64 00:03:23,290 --> 00:03:28,750 >> Felly, yn awr yn wahanol i'r argraffiad safonol, yn hytrach na bwysleisio'r drosodd ar y yn 65 00:03:28,750 --> 00:03:32,900 ffeiliau, rydym yn mynd i ailadrodd dros bob rhes yn y ffeil allan a chyfrif i maes 66 00:03:32,900 --> 00:03:38,130 sy'n rhes yn y ffeil yn yr ydym am ei rhoi mewn rhes hwn yn y ffeiliau y tu allan. 67 00:03:38,130 --> 00:03:44,930 Felly bwysleisio'r dros yr holl rhesi yn y tu allan ffeil yn defnyddio'r uchder newydd, rydym yn gyntaf 68 00:03:44,930 --> 00:03:48,890 mynd i benderfynu ar y rhes yn yr hen ffeilio rydym yn mynd i'w ddefnyddio, yr ydym yn 69 00:03:48,890 --> 00:03:53,560 mynd i'w wneud trwy gymryd cyfredol hwn rhes wedi'i rannu gan ffactor. 70 00:03:53,560 --> 00:03:58,000 Felly, mae hynny'n mynd i roi y rhes ni yn yr hen ffeil yr ydym am. 71 00:03:58,000 --> 00:04:03,310 >> Felly nawr os fferru rhes yn hen y nid gyfartal, rydym yn mynd i gael i ddarllen y rhes 72 00:04:03,310 --> 00:04:05,940 ein bod am i mewn i'n byffer rhes cyf. 73 00:04:05,940 --> 00:04:07,700 Felly, sut ydym yn mynd i wneud hynny? 74 00:04:07,700 --> 00:04:11,650 Yn gyntaf, rydym yn mynd at chyfrif i maes y sefyllfa sy'n dechrau y rhes yn y 75 00:04:11,650 --> 00:04:13,100 ffeil wreiddiol. 76 00:04:13,100 --> 00:04:18,630 Felly, y sefyllfa honno yn mynd i fod heibio bob un o'n penawdau a 77 00:04:18,630 --> 00:04:21,589 wedi mynd heibio hen y rhesi. 78 00:04:21,589 --> 00:04:23,880 >> Ac felly faint o bytes mewn rhes sengl? 79 00:04:23,880 --> 00:04:28,740 Unwaith eto, maint RGB amser triphlyg hen lled yn ogystal â hen padin, felly dyna y 80 00:04:28,740 --> 00:04:30,640 nifer o bytes mewn rhes sengl. 81 00:04:30,640 --> 00:04:33,680 Ac rydym am hepgor y gorffennol hen y rhesi. 82 00:04:33,680 --> 00:04:37,580 Felly, rydym yn mynd i f geisio ac rydym yn ddefnyddio ceisio gosod i ddechrau o'r 83 00:04:37,580 --> 00:04:39,100 dechrau o ffeil. 84 00:04:39,100 --> 00:04:42,740 Rydym yn mynd i f geisio swydd hon yn y ffeil, rhoi ni yn y 85 00:04:42,740 --> 00:04:46,500 ddechrau'r rhes rydym am i ddarllen i mewn i'n byffer. 86 00:04:46,500 --> 00:04:48,510 >> Rydym yn mynd i osod rhes ddideimlad cyfartal i hen y. 87 00:04:48,510 --> 00:04:53,080 Felly nawr os ydym cefn dolen ac rydym am defnyddio hyn un rhes yn ein ffeiliau y tu allan, 88 00:04:53,080 --> 00:04:55,970 yna nid ydym yn mynd i ddarllen mewn eto yn ddiangen. 89 00:04:55,970 --> 00:04:59,310 Felly mewn gwirionedd, fferru rhes yn dim ond optimization. 90 00:04:59,310 --> 00:05:05,500 >> Yn olaf, rydym yn mynd i ddarllen i mewn i'r rhes presennol yr hen lled RGB treblu'r 91 00:05:05,500 --> 00:05:08,040 ein bod yn eisiau o'r ffeil wreiddiol. 92 00:05:08,040 --> 00:05:12,270 Felly nawr cur rhes yn cynnwys y picsel o y ffeil gwreiddiol yr ydym am i 93 00:05:12,270 --> 00:05:14,200 ysgrifennu i mewn i'r ffeiliau y tu allan. 94 00:05:14,200 --> 00:05:18,960 Felly nawr, yn union fel uchod, yn hytrach na bwysleisio'r dros yr hen ffeil, mae angen 95 00:05:18,960 --> 00:05:22,560 i ailadrodd dros y ffeiliau rhesi newydd. 96 00:05:22,560 --> 00:05:27,450 Wel dyma, yn hytrach na bwysleisio'r dros yr holl o'r hen picsel, mewn rhes cyf, 97 00:05:27,450 --> 00:05:31,210 rydym am i ailadrodd dros bob un o'r picsel yn ein ffeil newydd yn y 98 00:05:31,210 --> 00:05:32,480 rhes penodol. 99 00:05:32,480 --> 00:05:34,140 >> Pam ydym ni eisiau ei wneud hynny? 100 00:05:34,140 --> 00:05:38,960 Oherwydd ein bod yn gweld yma nad ydym yn mewn gwirionedd o reidrwydd gan ddefnyddio pob un o'r 101 00:05:38,960 --> 00:05:41,020 picsel yn y ffeil wreiddiol. 102 00:05:41,020 --> 00:05:46,630 Oherwydd os ydym yn crebachu, gallem mewn gwirionedd yn awyddus i hepgor y picsel. 103 00:05:46,630 --> 00:05:48,090 Ac rydym yn gweld bod hyn - 104 00:05:48,090 --> 00:05:49,690 x wedi'i rannu gan ffactor - 105 00:05:49,690 --> 00:05:55,620 adlewyrchu'n agos i fyny yma lle rydym yn dweud y wedi'i rannu gan ffactor at chyfrif i maes bod 106 00:05:55,620 --> 00:06:02,480 yr hen y-fed rhes yn cyfateb i y y-fed res yn y ffeil hon newydd. 107 00:06:02,480 --> 00:06:05,880 >> Nawr rydym yn mynd i ysgrifennu pob un picsel hyn o'r hen rhes 108 00:06:05,880 --> 00:06:07,440 yn ein rhes newydd. 109 00:06:07,440 --> 00:06:10,890 Unwaith y byddwn wedi gwneud hynny, mae angen i ddim ond rhoi'r padin ar ddiwedd ein rhes 110 00:06:10,890 --> 00:06:15,540 ac yr ydym yn annhymerus 'dolen yn ôl ac yn parhau am pob un o'r rhesi yn ein ffeil newydd. 111 00:06:15,540 --> 00:06:19,390 Ar y diwedd, mae angen i ni gau ein hen ffeilio, cau ein ffeil newydd, a dychwelyd 112 00:06:19,390 --> 00:06:21,540 sero oherwydd aeth popeth iawn. 113 00:06:21,540 --> 00:06:24,220 >> Fy enw i yw Rob ac roedd hyn yn toriad. 114 00:06:24,220 --> 00:06:29,184 >> [CHWARAE CERDDORIAETH]