1 00:00:00,000 --> 00:00:02,700 [Powered by Google Translate] [Walkthrough - 4 Set Problem] 2 00:00:02,700 --> 00:00:05,000 [Zamyla Chan - Harvard University] 3 00:00:05,000 --> 00:00:07,340 [Mae hyn yn CS50. - CS50.TV] 4 00:00:08,210 --> 00:00:11,670 Mae pob hawl. Helo, bawb, a chroeso i Walkthrough 4. 5 00:00:11,670 --> 00:00:14,270 >> Heddiw mae ein pset yn Fforensig. 6 00:00:14,270 --> 00:00:18,080 Fforensig yn pset llawn hwyl sy'n golygu delio gyda ffeiliau didfap 7 00:00:18,080 --> 00:00:21,550 i ddarganfod pwy cyflawni trosedd. 8 00:00:21,550 --> 00:00:24,200 Yna rydym yn mynd i newid maint rhai ffeiliau didfap, 9 00:00:24,200 --> 00:00:27,780 yna rydym ni hefyd yn mynd i ddelio gyda rhan llawn hwyl a elwir yn Adfer, 10 00:00:27,780 --> 00:00:31,160 lle rydym yn rhoi bôn cerdyn cof 11 00:00:31,160 --> 00:00:34,350 lle mae rhywun wedi dileu ddamweiniol i gyd eu ffeiliau, 12 00:00:34,350 --> 00:00:38,860 ac rydym yn gofyn i adennill y ffeiliau. 13 00:00:38,860 --> 00:00:42,910 >> Ond yn gyntaf, cyn i ni fynd i mewn i'r pset, Fi 'n sylweddol jyst angen at longyfarch pawb. 14 00:00:42,910 --> 00:00:45,230 Rydym am ar bwynt canol y cwrs hwn. 15 00:00:45,230 --> 00:00:50,070 Cwis 0 yw tu ôl i ni, ac rydym yn pset4, felly yn y bôn, rydym hanner ffordd. 16 00:00:50,070 --> 00:00:55,490 Rydym wedi dod yn bell os ydych yn edrych yn ôl at eich psets, pset0 a pset1, 17 00:00:55,490 --> 00:00:57,300 felly llongyfarch eich hun am hynny, 18 00:00:57,300 --> 00:01:00,760 ac rydym yn mynd i gael i mewn i rai pethau yn llawer o hwyl. 19 00:01:00,760 --> 00:01:07,070 >> Felly mae ein pecyn cymorth ar gyfer y pset, unwaith eto, yn hytrach na rhedeg sudo yum-y diweddariad, 20 00:01:07,070 --> 00:01:13,890 rydym yn gallu jyst hidla update50 os ydych yn y fersiwn 17.3 ac uwch yr offer. 21 00:01:13,890 --> 00:01:17,380 Felly byddwch yn sicr o redeg update50 - mae'n haws lot, a chymeriadau ychydig llai - 22 00:01:17,380 --> 00:01:20,640 i wneud yn siŵr eich bod ar y fersiwn diweddaraf o'r offer. 23 00:01:20,640 --> 00:01:25,410 Yn enwedig, mae'n bwysig i update50 pan fyddwn yn dechrau defnyddio CS50 Gwirio. 24 00:01:25,410 --> 00:01:28,700 Felly, gwnewch yn siŵr eich bod yn gwneud hynny. 25 00:01:28,700 --> 00:01:30,760 >> Ar gyfer yr holl adrannau ar gyfer y pset, 26 00:01:30,760 --> 00:01:34,350 rydym yn mynd i fod yn delio gyda mewnbwn ffeiliau ac allbynnau, ffeilio I / O. 27 00:01:34,350 --> 00:01:38,140 Rydym yn mynd i fod yn mynd dros lawer iawn o raglenni sy'n delio â araeau 28 00:01:38,140 --> 00:01:40,350 bwyntio at ffeiliau a phethau fel 'na, 29 00:01:40,350 --> 00:01:43,050 felly rydym yn awyddus i wneud yn siŵr ein bod yn wir yn gyfarwydd ac yn gyfforddus 30 00:01:43,050 --> 00:01:47,990 ymdrin â sut i mewnbwn ac allbwn i mewn i ffeiliau. 31 00:01:47,990 --> 00:01:52,080 >> Yn y cod dosbarthu ar gyfer y pset yn ffeil o'r enw copy.c, 32 00:01:52,080 --> 00:01:55,280 a dyna beth rydym yn mynd i ddod o hyd yn mynd i fod yn ddefnyddiol iawn i ni 33 00:01:55,280 --> 00:02:00,340 oherwydd ein bod ni'n mynd i roi diwedd ar i fyny mewn gwirionedd gopïo'r ffeil copy.c 34 00:02:00,340 --> 00:02:05,350 a dim ond newid mymryn arni er mwyn gallu cyflawni y 2 rhannau o'r broblem a osodwyd. 35 00:02:05,350 --> 00:02:09,030 >> Ac felly, yna fel y soniais o'r blaen, yr ydym yn delio â bitmaps yn ogystal â JPEG. 36 00:02:09,030 --> 00:02:13,170 Felly mewn gwirionedd deall y strwythur o ran sut y ffeiliau yn cael eu trefnu, 37 00:02:13,170 --> 00:02:16,170 sut y gallwn wir yn y 0s a 1s i structs 38 00:02:16,170 --> 00:02:19,040 a phethau y gallwn mewn gwirionedd yn deall a dehongli a golygu, 39 00:02:19,040 --> 00:02:21,000 a fydd yn wirioneddol bwysig, 40 00:02:21,000 --> 00:02:25,970 felly roedd mynd i mewn i JPEG a ffeiliau didfap a deall strwythur y rhai. 41 00:02:25,970 --> 00:02:30,780 >> Pset4, fel arfer, yn dechrau gydag adran o gwestiynau. 42 00:02:30,780 --> 00:02:36,600 Bydd y rhai yn delio gyda ffeiliau I / O, ac yn mynd â chi gyfarwydd â hynny. 43 00:02:36,600 --> 00:02:42,520 Yna rhan 1 yn Whodunit, lle rydych yn cael ffeil bitmap 44 00:02:42,520 --> 00:02:45,630 sy'n edrych fath o fel dotiau coch ar hyd a lled. 45 00:02:45,630 --> 00:02:52,180 Ac yna yn y bôn yr hyn yr ydym yn mynd i wneud yw cymryd y ffeil a dim ond ychydig yn ei olygu 46 00:02:52,180 --> 00:02:54,010 i mewn i fersiwn y gallwn ddarllen. 47 00:02:54,010 --> 00:02:56,000 Yn y bôn, unwaith i ni orffen, bydd gennym yr un ffeil, 48 00:02:56,000 --> 00:03:02,630 ac eithrio byddwn yn gallu gweld y neges gudd cuddio gan bawb dotiau coch. 49 00:03:02,630 --> 00:03:07,310 Yna Newid maint yn rhaglen, o ystyried ffeil 50 00:03:07,310 --> 00:03:11,490 ac yna rhoddir enw'r ffeil fod yn allbynnau ac yna rhoddir nifer hefyd, 51 00:03:11,490 --> 00:03:16,850 mewn gwirionedd yn newid maint y didfap gan y gwerth cyfanrif. 52 00:03:16,850 --> 00:03:19,240 Yna, yn olaf, mae gennym y pset gwella. 53 00:03:19,240 --> 00:03:24,160 Rydym yn cael cerdyn cof ac yna rhaid i adennill y cyfan o'r lluniau 54 00:03:24,160 --> 00:03:25,920 sydd wedi cael eu dileu ddamweiniol, 55 00:03:25,920 --> 00:03:31,420 ond, nid gan y byddwn yn dysgu, dileu mewn gwirionedd ac yn tynnu oddi ar y ffeil; 56 00:03:31,420 --> 00:03:38,470 rydym yn unig fath o golli lle roeddent yn y ffeil, ond rydym yn mynd i adfer hynny. 57 00:03:38,470 --> 00:03:44,950 >> Great. Felly, yn mynd i mewn i ffeil gallaf / O benodol, mae'r rhain yn rhestr gyfan o swyddogaethau y byddwch yn eu defnyddio. 58 00:03:44,950 --> 00:03:49,840 Rydych eisoes wedi gweld ychydig elfennau sylfaenol fopen, fread, a fwrite, 59 00:03:49,840 --> 00:03:54,350 ond rydym ni'n mynd i edrych ymhellach i mewn i rai ffeil gallaf / swyddogaethau O megis fputc, 60 00:03:54,350 --> 00:03:56,930 lle 'ch jyst ysgrifennu un cymeriad ar y tro, 61 00:03:56,930 --> 00:04:02,000 i fseek, lle rydych yn fath o symud y ffeil dangosydd sefyllfa yn ôl ac ymlaen, 62 00:04:02,000 --> 00:04:05,770 ac yna rhai eraill. Ond byddwn yn mynd i mewn i hynny ychydig yn ddiweddarach yn ystod y pset. 63 00:04:08,050 --> 00:04:13,100 >> Felly, yn gyntaf, dim ond i fynd i mewn i ffeil I / O cyn i ni fynd i mewn i'r pset, 64 00:04:13,100 --> 00:04:19,860 i agor ffeil, er enghraifft, yr hyn y mae'n rhaid i chi ei wneud yw gosod mewn gwirionedd pwyntydd i'r ffeil. 65 00:04:19,860 --> 00:04:22,710 Felly mae gennym FFEIL pwyntydd *. 66 00:04:22,710 --> 00:04:27,140 Yn yr achos hwn, rwy'n galw ei wneud yn yn y pwyntydd oherwydd mae hynny'n mynd i fod yn fy infile. 67 00:04:27,140 --> 00:04:33,340 Ac felly dwi'n mynd i ddefnyddio'r fopen swyddogaeth ac yna enw'r ffeil 68 00:04:33,340 --> 00:04:36,360 ac yna y modd y mae Rydw i'n mynd i fod yn delio gyda'r ffeil. 69 00:04:36,360 --> 00:04:42,080 Felly, mae "r" yn yr achos hwn ar gyfer darllen, "w" ar gyfer ysgrifennu, ac yna "a" ar gyfer atodi. 70 00:04:42,080 --> 00:04:44,270 Er enghraifft, pan fyddwch yn delio â infile 71 00:04:44,270 --> 00:04:47,310 a phob ydych am ei wneud yw darllen y darnau a bytes storio yno, 72 00:04:47,310 --> 00:04:50,420 yna mae'n debyg eich bod yn mynd i eisiau defnyddio "r" fel eich dull. 73 00:04:50,420 --> 00:04:54,520 Pan fyddwch am i ysgrifennu mewn gwirionedd, yn gwneud math o ffeil newydd, 74 00:04:54,520 --> 00:04:57,220 Yna, beth ydym yn mynd i'w wneud yw ein bod yn mynd i agor y ffeil newydd 75 00:04:57,220 --> 00:05:02,410 a defnyddio'r "w" modd ar gyfer ysgrifennu. 76 00:05:02,410 --> 00:05:07,540 >> Felly, yna pan fyddwch chi'n mewn gwirionedd yn darllen yn y ffeiliau, mae'r strwythur fel a ganlyn. 77 00:05:07,540 --> 00:05:14,930 Yn gyntaf i chi gynnwys y pwyntydd i'r strwythur a fydd yn cynnwys y bytes eich bod yn darllen. 78 00:05:14,930 --> 00:05:19,830 Felly, mae hynny'n mynd i fod yn y lleoliad diwedd y bytes eich bod yn darllen. 79 00:05:19,830 --> 00:05:23,360 Rydych chi'n wedyn yn mynd i ddangos y maint, fel y bôn faint o bytes 80 00:05:23,360 --> 00:05:30,100 eich rhaglen wedi i ddarllen i mewn i'r ffeil, maint y bôn un elfen yw, 81 00:05:30,100 --> 00:05:32,620 ac yna rydych chi'n mynd i bennu faint o elfennau rydych am ei ddarllen. 82 00:05:32,620 --> 00:05:34,980 Ac yna yn olaf, rhaid i chi wybod ble rydych chi'n darllen, 83 00:05:34,980 --> 00:05:37,580 fel bod yn mynd i fod yn eich pwyntydd yn. 84 00:05:37,580 --> 00:05:41,780 I lliw-godio rhain oherwydd fread hefyd yn hynod o debyg i fwrite, 85 00:05:41,780 --> 00:05:47,050 heblaw eich bod am wneud yn siŵr eich bod yn defnyddio'r drefn gywir, 86 00:05:47,050 --> 00:05:51,960 gwneud yn siŵr eich bod mewn gwirionedd yn ysgrifennu at neu ddarllen o'r ffeil cywir. 87 00:05:54,910 --> 00:05:58,610 >> Felly, yna fel o'r blaen, os ydym yn cael y maint yr elfen yn ogystal â nifer o elfennau, 88 00:05:58,610 --> 00:06:00,600 yna gallwn chwarae o gwmpas yma ychydig. 89 00:06:00,600 --> 00:06:06,810 Dweud Mae gen i strwythur CŴN ac felly, rwyf am i ddarllen dau gi ar y tro. 90 00:06:06,810 --> 00:06:12,450 Beth gallwn ei wneud yw dweud y maint o un elfen yn mynd i fod y maint un CŴN 91 00:06:12,450 --> 00:06:14,770 ac rydw i'n mynd i mewn gwirionedd yn darllen dau ohonynt. 92 00:06:14,770 --> 00:06:18,290 Fel arall, yr hyn y gallwn ei wneud yw dweud Im 'jyst yn mynd i ddarllen un elfen 93 00:06:18,290 --> 00:06:21,340 a bod un elfen yn mynd i fod y maint o ddau gi. 94 00:06:21,340 --> 00:06:24,320 Felly dyna cyfateb sut y gallwch math o chwarae o gwmpas gyda maint a nifer 95 00:06:24,320 --> 00:06:28,250 yn dibynnu ar beth sydd yn fwy greddfol i chi. 96 00:06:28,250 --> 00:06:30,810 >> Mae pob hawl. Felly, yn awr rydym yn cael i ffeiliau ysgrifennu. 97 00:06:30,810 --> 00:06:36,880 Pan fyddwch am i ysgrifennu ffeil, mae'r ddadl cyntaf yw mewn gwirionedd yn lle rydych yn darllen. 98 00:06:36,880 --> 00:06:42,050 Felly dyna y bôn y data yr ydych yn mynd i ysgrifennu i mewn i'r ffeil, 99 00:06:42,050 --> 00:06:44,490 sef y pwyntydd y tu allan ar y diwedd. 100 00:06:44,490 --> 00:06:47,670 Felly, pan fyddwch chi'n ymdrin â'r pset, gwnewch yn siŵr nad ydych yn drysu. 101 00:06:47,670 --> 00:06:50,480 Efallai fod yr ochr diffiniadau yn ochr. 102 00:06:50,480 --> 00:06:58,090 Gallwch dynnu y diffiniadau yn y llawlyfr trwy deipio ddyn ac yna fwrite, er enghraifft, 103 00:06:58,090 --> 00:06:59,950 yn y derfynell, neu gallwch gyfeirio yn ôl at y sleid 104 00:06:59,950 --> 00:07:03,570 a gwnewch yn siwr eich bod yn defnyddio yr un cywir. 105 00:07:03,570 --> 00:07:08,700 Felly, unwaith eto, ar gyfer fwrite, pan fydd gennych ffeil yr ydych am i ysgrifennu i mewn i, 106 00:07:08,700 --> 00:07:14,290 mae hynny'n mynd i fod yn y ddadl ddiwethaf ac mae hynny'n mynd i fod yn pwyntydd i'r ffeil. 107 00:07:14,290 --> 00:07:18,670 Felly, yna dyna sut yr ydym yn delio gydag ysgrifennu efallai bytes nifer ar y tro, 108 00:07:18,670 --> 00:07:21,820 ond yn dweud a ydych dim ond ysgrifennu mewn dim ond un cymeriad unigol. 109 00:07:21,820 --> 00:07:25,940 Fel byddwn yn gweld yn nes ymlaen yn yr enghraifft hon, yn y bitmaps bydd rhaid i ni ddefnyddio hynny. 110 00:07:25,940 --> 00:07:32,180 Dyna pryd y gallwn ddefnyddio fputc, yn y bôn dim ond rhoi un cymeriad ar y tro, bedyddiwyd, 111 00:07:32,180 --> 00:07:37,050 i mewn i'r pwyntydd ffeil, a dyna ein pwyntydd i maes 'na. 112 00:07:38,700 --> 00:07:41,560 Felly, yna pryd bynnag y byddwn yn chwilio am nac yn ysgrifennu mewn ffeil, 113 00:07:41,560 --> 00:07:44,690 y ffeil yn cadw golwg ar ble rydym yn. 114 00:07:44,690 --> 00:07:47,810 Felly mae'n rhyw fath o cyrchwr, y ffeil dangosydd sefyllfa. 115 00:07:47,810 --> 00:07:54,330 Ac felly pryd bynnag y byddwn yn ysgrifennu neu ddarllen eto i mewn i ffeil, 116 00:07:54,330 --> 00:07:56,760 y ffeil mewn gwirionedd yn cofio lle y mae, 117 00:07:56,760 --> 00:07:59,270 ac felly ei fod yn parhau o ble y cyrchwr. 118 00:07:59,270 --> 00:08:03,970 Gall hyn fod yn fuddiol pan fyddwch am, dyweder, darllen mewn swm penodol i wneud rhywbeth 119 00:08:03,970 --> 00:08:06,160 ac yna ei ddarllen yn y swm canlynol, 120 00:08:06,160 --> 00:08:10,700 ond weithiau efallai y byddwn eisiau mynd yn ôl neu mewn gwirionedd yn dechrau o werth cyfeirio penodol. 121 00:08:10,700 --> 00:08:16,870 Felly, yna bydd y swyddogaeth fseek, beth mae'n ei wneud yw caniatáu i ni symud y cyrchwr mewn ffeil penodol 122 00:08:16,870 --> 00:08:19,680 nifer penodol o bytes. 123 00:08:19,680 --> 00:08:24,260 Ac yna beth mae'n rhaid i ni ei wneud yw nodi lle mae gwerth cyfeirio yw. 124 00:08:24,260 --> 00:08:31,520 Felly, naill ai yn symud ymlaen neu yn ôl o ble y cyrchwr ar hyn o bryd, 125 00:08:31,520 --> 00:08:35,750 neu gallwn nodi y dylai dim ond yn symud i mewn o ddechrau y ffeil 126 00:08:35,750 --> 00:08:37,090 neu o ddiwedd y ffeil. 127 00:08:37,090 --> 00:08:41,230 Ac er mwyn i chi basio i mewn gwerthoedd negyddol neu gadarnhaol i swm, 128 00:08:41,230 --> 00:08:44,960 a bydd y math hwnnw o symud y cyrchwr naill ai ymlaen neu yn ôl. 129 00:08:46,170 --> 00:08:51,920 >> Cyn i ni fynd i mewn i'r psets eraill, unrhyw gwestiynau ar ffeil I / O? 130 00:08:53,860 --> 00:08:59,990 Iawn. Wrth i ni fynd i mewn mwy o enghreifftiau, mae croeso i roi'r gorau i mi ar gyfer cwestiynau. 131 00:08:59,990 --> 00:09:06,930 >> Felly, yn Whodunit, rydych yn rhoi ffeil bitmap tebyg i hwn coch ar y sleid, 132 00:09:06,930 --> 00:09:14,510 ac mae'n edrych fel hyn - criw o ddotiau coch - ac nad ydych yn wir yn gwybod beth sy'n ysgrifenedig. 133 00:09:14,510 --> 00:09:23,310 Os ydych yn llygad croes, efallai y byddwch yn gallu gweld lliw bluish bach y tu mewn i'r canol. 134 00:09:23,310 --> 00:09:26,270 Yn y bôn, dyna lle mae'r testun yn cael ei storio. 135 00:09:26,270 --> 00:09:30,270 Roedd llofruddiaeth a ddigwyddodd, ac mae angen i ni gael gwybod pwy oedd yn gyfrifol. 136 00:09:30,270 --> 00:09:36,760 Er mwyn gwneud hynny, mae angen i fath o newid y ddelwedd hon i mewn i fformat darllenadwy. 137 00:09:36,760 --> 00:09:42,740 Os ydych chi erioed wedi dod ar draws guys hyn, weithiau byddai pecynnau bach 138 00:09:42,740 --> 00:09:48,510 lle y byddai gennych chwyddwydr gyda ffilm coch. Dylai unrhyw un? Yeah. 139 00:09:48,510 --> 00:09:52,770 Felly, byddech yn rhywbeth llaw fel hyn, byddai gennych chwyddwydr 140 00:09:52,770 --> 00:09:58,130 gyda'r ffilm goch drosto, byddech yn ei roi dros y ddelwedd, 141 00:09:58,130 --> 00:10:03,410 a fyddech yn gallu gweld y neges gudd ynddo. 142 00:10:03,410 --> 00:10:07,080 Nid oes gennym chwyddwydr gyda ffilm coch, felly yn lle rydyn ni'n mynd i fath o greu ein hunain 143 00:10:07,080 --> 00:10:09,060 yn y pset. 144 00:10:09,060 --> 00:10:15,760 Ac felly mae'r defnyddiwr yn mynd i, whodunit mewnbwn yna y cliw,. Bmp, 145 00:10:15,760 --> 00:10:18,800 felly dyna y infile, dyna'r neges dot coch, 146 00:10:18,800 --> 00:10:23,550 ac yna maen nhw'n dweud verdict.bmp yn mynd i fod yn ein outfile. 147 00:10:23,550 --> 00:10:27,900 Felly, mae'n mynd i greu delwedd bitmap newydd tebyg i'r cliw 1 148 00:10:27,900 --> 00:10:32,600 ac eithrio mewn fformat darllenadwy lle gallwn weld y neges gudd. 149 00:10:32,600 --> 00:10:37,550 >> Ers i ni yn mynd i fod yn delio â golygu a thrin bitmaps o ryw fath, 150 00:10:37,550 --> 00:10:42,400 rydym yn mynd i fath o blymio mewn i mewn i strwythur y ffeiliau hyn bitmap. 151 00:10:42,400 --> 00:10:48,130 Aethom dros y bit ychydig mewn darlith, ond gadewch i ni edrych i mewn iddynt rhai mwy. 152 00:10:48,130 --> 00:10:51,740 Bitmaps yn y bôn yn unig drefniant o bytes 153 00:10:51,740 --> 00:10:55,790 lle'r ydym wedi nodi pa bytes golygu beth. 154 00:10:55,790 --> 00:11:00,540 Felly dyma fath o fel map o'r ddelwedd bitmap 155 00:11:00,540 --> 00:11:08,550 gan ddweud ei fod yn dechrau gyda rhai ffeiliau pennawd, yn dechrau gyda rhywfaint o wybodaeth i mewn 'na. 156 00:11:08,550 --> 00:11:16,540 Byddwch yn gweld bod tua rhif 14 beit maint yn cael ei nodi o'r ddelwedd didfap, 157 00:11:16,540 --> 00:11:18,520 ac mae'n parhau ar. 158 00:11:18,520 --> 00:11:23,810 Ond yna beth rydym yn wir ddiddordeb mewn yma yn cychwyn o amgylch rhif y beit 54. 159 00:11:23,810 --> 00:11:26,060 Mae gennym y treblu'r RGB. 160 00:11:26,060 --> 00:11:30,760 Beth mae hynny'n mynd i wneud yw cynnwys y pixels gwirioneddol, y gwerthoedd lliw. 161 00:11:30,760 --> 00:11:35,950 Mae popeth yn uwch na yn y pennawd yn rhywfaint o wybodaeth 162 00:11:35,950 --> 00:11:41,240 sy'n cyfateb i faint y ddelwedd, lled y ddelwedd, a'r uchder. 163 00:11:41,240 --> 00:11:44,930 Pan fyddwn yn mynd i mewn i padin yn nes ymlaen, byddwn yn gweld pam fod maint y ddelwedd 164 00:11:44,930 --> 00:11:48,670 allai fod yn wahanol i'r lled neu uchder. 165 00:11:48,670 --> 00:11:54,240 Felly, wedyn i gynrychioli rhain - y delweddau didfap yn ddilyniannau o bytes - 166 00:11:54,240 --> 00:11:59,370 yr hyn y gallem ei wneud yw dweud iawn, dwi'n mynd i gofio bod yn fynegai 14, 167 00:11:59,370 --> 00:12:03,380 dyna lle mae'r maint yn, er enghraifft, ond yn hytrach yr hyn yr ydym ni'n mynd i'w wneud i wneud hyn yn haws 168 00:12:03,380 --> 00:12:06,020 yn cael ei chrisialu mewn strwythur. 169 00:12:06,020 --> 00:12:08,880 Ac felly mae gennym ddau structs a wnaed i ni, a BITMAPFILEHEADER 170 00:12:08,880 --> 00:12:10,440 a BITMAPINFOHEADER, 171 00:12:10,440 --> 00:12:14,840 ac felly pryd bynnag rydym yn darllen yn i'r ffeil, yn ddiofyn mae'n mynd i fod yn mynd yn eu trefn, 172 00:12:14,840 --> 00:12:22,360 ac felly er mwyn mae hefyd yn mynd i lenwi'r i mewn i newidynnau megis biWidth a biSize. 173 00:12:25,270 --> 00:12:31,230 Ac yna yn olaf, mae pob picsel yn cael ei chynrychioli gan dri bytes. 174 00:12:31,230 --> 00:12:35,500 Mae'r un cyntaf yw'r swm y glas yn y picsel, yr ail yw'r swm o wyrdd, 175 00:12:35,500 --> 00:12:41,120 ac yn olaf, y swm o goch, lle mae 0 yn ei hanfod nid oes wyrdd glas neu ddim neu ddim goch 176 00:12:41,120 --> 00:12:43,720 ac yna ff yw'r gwerth uchaf. 177 00:12:43,720 --> 00:12:46,800 Mae'r rhain yn werthoedd hecsadegol. 178 00:12:46,800 --> 00:12:53,870 Felly, yna os oes gennym ff0000, yna mae hynny'n cyfateb i uchafswm y glas 179 00:12:53,870 --> 00:12:58,890 ac yna dim gwyrdd a dim coch, felly, yna a fyddai'n rhoi i ni picsel glas. 180 00:12:58,890 --> 00:13:04,190 Yna, os oes gennym ff yn gyd ar draws y bwrdd, yna mae hynny'n golygu bod gennym picsel gwyn. 181 00:13:04,190 --> 00:13:11,370 Mae hyn yn fath o gyferbyn i fel arfer pan fyddwn yn dweud RGB. Mae'n wir yn mynd BGR. 182 00:13:12,750 --> 00:13:18,990 >> Felly, os ydym mewn gwirionedd yn edrych i mewn i enghraifft o ddelwedd bitmap - gadewch i mi dynnu un i fyny yma. 183 00:13:31,560 --> 00:13:33,830 Mae'n ychydig bach. 184 00:13:39,890 --> 00:13:47,840 Rwy'n chwyddo i mewn, a gallwn weld ei fod yn pixelated. Mae'n edrych fel blociau o liw. 185 00:13:47,840 --> 00:13:50,110 Mae gennych blociau gwyn ac yna blociau coch. 186 00:13:50,110 --> 00:13:53,700 Os ydych yn chwarae yn Microsoft Paint, er enghraifft, fe allech chi wneud rhywbeth fel 'na 187 00:13:53,700 --> 00:13:58,960 gan y bôn yn unig paentio sgwariau penodol mewn trefn benodol. 188 00:13:58,960 --> 00:14:08,060 Felly, yna beth mae hyn yn golygu yn y didfap fel a ganlyn. 189 00:14:08,060 --> 00:14:15,710 Yma, mae gennym picsel gwyn cyntaf, fod pob 6 yn f, ac yna mae gennym picsel coch, 190 00:14:15,710 --> 00:14:19,910 nodwyd gan 0000ff. 191 00:14:19,910 --> 00:14:27,940 Ac felly y dilyniant o bytes sydd gennym yn dangos sut mae'r ddelwedd bitmap yn mynd i edrych. 192 00:14:27,940 --> 00:14:32,230 Felly beth rwyf wedi ei wneud yma yn ysgrifenedig yn unig allan bawb bytes ac yna lliw yn y coch 193 00:14:32,230 --> 00:14:37,550 fel y gallwch fath o weld, os ydych yn llygad croes ychydig bach, sut y math hwnnw o yn dangos wyneb hapus. 194 00:14:40,180 --> 00:14:46,390 >> Mae'r ffordd y delweddau didfap gwaith yw fy mod rhagweld yn y bôn fel grid. 195 00:14:46,390 --> 00:14:54,940 Ac felly yn ddiofyn, pob rhes yn y grid wedi i fod yn lluosrif o 4 bytes. 196 00:15:00,520 --> 00:15:07,060 Os ydym yn edrych ar delwedd bitmap, rydych yn llenwi bob gwerth. 197 00:15:07,060 --> 00:15:17,370 Er enghraifft, efallai y bydd gennych coch yma, gwyrdd yma, yn las yma, 198 00:15:17,370 --> 00:15:24,950 ond rhaid i chi wneud yn siŵr bod y ddelwedd yn cael ei lenwi gyda lluosog o bedwar bytes. 199 00:15:24,950 --> 00:15:32,200 Felly os wyf eisiau i fy ddelwedd i fod yn dri bloc o led, yna byddai'n rhaid i mi roi gwerth gwag 200 00:15:32,200 --> 00:15:35,640 yn yr un olaf i'w gwneud yn lluosog o bedwar. 201 00:15:35,640 --> 00:15:39,530 Felly, yna byddwn yn ychwanegu rhywbeth yr ydym yn galw padin. 202 00:15:39,530 --> 00:15:43,750 Im 'jyst yn mynd i ddangos bod gyda x. 203 00:15:44,920 --> 00:15:54,160 Nawr rydym am ddweud delwedd sy'n yn 7 picsel hir, er enghraifft. 204 00:15:54,160 --> 00:15:59,550 Mae gennym 1, 2, 3, 4, 5, 6, 7, 205 00:16:04,750 --> 00:16:07,000 ac mae pob un sy'n cael ei llenwi â lliw. 206 00:16:07,000 --> 00:16:10,620 Mae'r ffordd y delweddau didfap yn gweithio yw bod angen inni gael 8fed. 207 00:16:10,620 --> 00:16:12,460 Ar hyn o bryd rydym wedi 1, 2, 3, 4, 5, 6, 7. 208 00:16:12,460 --> 00:16:19,360 Mae angen 8 lle ar gyfer y ddelwedd bitmap i ddarllen yn gywir. 209 00:16:19,360 --> 00:16:25,600 Felly, yna beth mae'n rhaid i ni ei wneud yw ychwanegu mewn dim ond ychydig o padin 210 00:16:25,600 --> 00:16:29,430 i wneud yn siŵr bod yr holl led yn unffurf 211 00:16:29,430 --> 00:16:34,260 a bod pob un o'r lled yn luosrif o 4. 212 00:16:42,110 --> 00:16:47,310 Ac felly yr wyf nodwyd yn flaenorol, padio fel x neu squiggly llinell, 213 00:16:47,310 --> 00:16:53,880 ond yn y delweddau didfap gwirioneddol y padin yn dangos o 0 hecsadegol. 214 00:16:53,880 --> 00:16:57,340 Felly, byddai hynny'n cymeriad unigol, 0. 215 00:16:58,980 --> 00:17:06,329 Beth allai ddod yn ddefnyddiol yn y gorchymyn xxd. 216 00:17:06,329 --> 00:17:11,220 Beth mae'n ei wneud yw mewn gwirionedd yn dangos i chi, hoffi debyg i'r hyn wnes i cyn y smiley 217 00:17:11,220 --> 00:17:15,630 pan fyddaf yn argraffu mewn gwirionedd beth fyddai pob lliw ar gyfer y pixel 218 00:17:15,630 --> 00:17:21,800 ac yna lliw-godio, pan fyddwch yn rhedeg xxd gyda gorchmynion canlynol, 219 00:17:21,800 --> 00:17:28,670 yna bydd yn mewn gwirionedd yn argraffu'r beth y lliwiau ar gyfer y rhai picsel. 220 00:17:28,670 --> 00:17:33,810 Beth sy'n rhaid i chi ei wneud yw dros yma yr wyf yn dangos, fel y s-54 221 00:17:33,810 --> 00:17:36,530 yn dweud fy mod i'n mynd i ddechrau ar y 54eg beit 222 00:17:36,530 --> 00:17:40,820 oherwydd cyn hynny, cofiwch os ydym yn edrych yn ôl at y map o bitmaps, 223 00:17:40,820 --> 00:17:42,690 dyna yr holl wybodaeth pennawd a phethau fel 'na. 224 00:17:42,690 --> 00:17:46,280 Ond yr hyn yr ydym wir yn poeni am yr picsel gwirioneddol sy'n dangos y lliw. 225 00:17:46,280 --> 00:17:52,700 Felly, drwy ychwanegu yn y faner,-s 54, yna rydym yn gallu gweld y gwerthoedd lliw. 226 00:17:52,700 --> 00:17:56,020 A pheidiwch â phoeni am y baneri cymhleth a phethau fel 'na. 227 00:17:56,020 --> 00:18:05,020 Yn y set problem fanyleb, bydd gennych cyfarwyddiadau ar sut i ddefnyddio xxd i arddangos y picsel. 228 00:18:07,070 --> 00:18:15,590 Felly, os ydych yn gweld yma, mae'n fath o edrych fel bocs gwyrdd, y peth bach. 229 00:18:15,590 --> 00:18:23,610 Rwyf wedi lliw-godio y 00ff00 fel y bôn dweud na glas, mae llawer o wyrdd, a dim coch. 230 00:18:23,610 --> 00:18:26,370 Felly, sy'n cyfateb i wyrdd. 231 00:18:26,370 --> 00:18:31,920 Fel y gwelwch yma, rydym yn gweld petryal gwyrdd. 232 00:18:31,920 --> 00:18:36,660 Mae'r petryal gwyrdd yn dim ond 3 picsel o led, felly, yna yr hyn sydd gennym i'w wneud 233 00:18:36,660 --> 00:18:44,350 i wneud yn siŵr bod y ddelwedd yn lluosrif o 4 eang yn ychwanegu padin ychwanegol. 234 00:18:44,350 --> 00:18:49,460 Ac felly, yna dyna sut yr ydych yn gweld y rhain 0au yma. 235 00:18:49,460 --> 00:18:54,510 Bydd hyn mewn gwirionedd yn ganlyniad eich pset Newid maint, 236 00:18:54,510 --> 00:19:01,350 yn y bôn cymryd y didfap bach ac yna helaethu erbyn 4. 237 00:19:01,350 --> 00:19:09,380 Ac felly yr hyn a welwn yw bod mewn gwirionedd yn y ddelwedd hon yw 12 picsel o led, ond mae 12 yn lluosrif o 4, 238 00:19:09,380 --> 00:19:12,940 ac felly nid ydym mewn gwirionedd yn gweld unrhyw 0au ar y diwedd oherwydd nad oes angen i ni ychwanegu unrhyw 239 00:19:12,940 --> 00:19:19,070 oherwydd ei fod yn padio llawn. Nid oes ganddi le mwyach. 240 00:19:20,720 --> 00:19:23,470 >> Iawn. Unrhyw gwestiynau am padin? 241 00:19:25,150 --> 00:19:27,460 Iawn. Cool. 242 00:19:27,460 --> 00:19:32,520 >> Fel y soniais o'r blaen, mae'r bitmaps yn unig cyfres o bytes. 243 00:19:32,520 --> 00:19:39,170 Ac felly yr hyn sydd gennym yn hytrach na angen i gadw golwg ar yn union pa nifer o beit 244 00:19:39,170 --> 00:19:47,050 yn cyfateb i elfen benodol, yr ydym mewn gwirionedd wedi creu strwythur i gynrychioli'r hynny. 245 00:19:47,050 --> 00:19:50,930 Felly, yr hyn sydd gennym yw strwythur RGBTRIPLE. 246 00:19:50,930 --> 00:19:54,590 Pryd bynnag y byddwch yn cael achos o driphlyg RGB, 247 00:19:54,590 --> 00:20:00,970 oherwydd mae hyn yn fath diffinio strwythur, yna gallwch ei weld ar y newidyn rgbtBlue, 248 00:20:00,970 --> 00:20:09,520 yn yr un modd y newidynnau Gwyrdd a Choch, a fydd yn dangos faint o las, gwyrdd, a choch 249 00:20:09,520 --> 00:20:11,580 yn y drefn honno, mae gennych. 250 00:20:11,580 --> 00:20:16,800 >> Felly, os oes gennym y set amrywiol glas i 0, y set gwyrdd i ff, 251 00:20:16,800 --> 00:20:22,060 sef y gwerth uchafswm y gallwch ei gael, ac yna y newidyn coch osod i 0, 252 00:20:22,060 --> 00:20:27,870 yna byddai pa liw hyn yn arbennig RGB triphlyg gynrychioli? >> [Myfyrwyr] Green. 253 00:20:27,870 --> 00:20:29,150 Green. Yn union. 254 00:20:29,150 --> 00:20:34,480 Mae'n mynd i fod yn ddefnyddiol i wybod bod pryd bynnag y byddwch yn cael achos o driphlyg RGB, 255 00:20:34,480 --> 00:20:41,340 alli 'n weithredol gael mynediad at y swm y lliw - glas, gwyrdd, a choch - ar wahân. 256 00:20:43,350 --> 00:20:54,900 >> Nawr ein bod wedi trafod y strwythur hynny, gadewch i ni edrych ar y ffeil BMP. 257 00:20:54,900 --> 00:20:57,870 Mae'r rhain yn structs ar eich rhan. 258 00:20:57,870 --> 00:21:01,820 Yma mae gennym strwythur BITMAPFILEHEADER. 259 00:21:01,820 --> 00:21:07,610 O ddiddordeb yn y maint. 260 00:21:07,610 --> 00:21:12,660 Yn ddiweddarach, mae gennym y, header gwybodaeth sydd ychydig o bethau eraill sydd yn ddiddorol i ni, 261 00:21:12,660 --> 00:21:15,480 sef y maint, lled, a'i huchder. 262 00:21:15,480 --> 00:21:19,170 Fel byddwn yn mynd i mewn yn ddiweddarach, pan fyddwch yn darllen i mewn i'r ffeil, 263 00:21:19,170 --> 00:21:25,500 'n awtomatig darllen yn oherwydd ein bod wedi gosod y gorchymyn i fod yr un fath. 264 00:21:25,500 --> 00:21:31,990 Felly, bydd y biSize yn cynnwys y bytes cywir sy'n cyfateb i faint gwirioneddol y ddelwedd. 265 00:21:34,700 --> 00:21:40,500 Ac yna dyma, yn olaf, fel yr ydym wedi siarad amdano, mae gennym y strwythur typedef RGBTRIPLE. 266 00:21:40,500 --> 00:21:46,840 Mae gennym rgbtBlue, Green, a Red gysylltiedig ag ef. 267 00:21:48,210 --> 00:21:49,340 >> Great. Iawn. 268 00:21:49,340 --> 00:21:56,360 Nawr ein bod yn deall bitmaps ychydig bach, yn deall bod gennym pennawd ffeil 269 00:21:56,360 --> 00:22:00,790 a pennawd gwybodaeth sy'n gysylltiedig ag ef ac yna ar ôl hynny, mae gennym y pethau diddorol 270 00:22:00,790 --> 00:22:05,110 y lliwiau, a'r rhai lliwiau yn cael eu cynrychioli gan structs RGBTRIPLE, 271 00:22:05,110 --> 00:22:12,710 a'r rheiny, yn eu tro, wedi tri gwerthoedd sy'n gysylltiedig at y glas, gwyrdd, a'r coch. 272 00:22:12,710 --> 00:22:17,270 >> Felly nawr, gallwn fath o feddwl am Adfer ychydig. 273 00:22:17,270 --> 00:22:20,130 Mae'n ddrwg gennym. Meddyliwch am Whodunit. 274 00:22:20,130 --> 00:22:25,750 Pan fyddwn wedi ein ffeil syniad, yna beth yr ydym am ei wneud yw darllen i mewn iddo picsel gan picsel 275 00:22:25,750 --> 00:22:33,860 ac wedyn rhywsut newid y picsel fel y gallwn allbwn i mewn i fformat darllenadwy. 276 00:22:33,860 --> 00:22:41,020 Ac felly i allbwn, rydym yn mynd i ysgrifennu picsel gan picsel i mewn i'r ffeil verdict.bmp. 277 00:22:41,020 --> 00:22:45,120 Dyna math o lawer i'w wneud. Rydym yn sylweddoli hynny. 278 00:22:45,120 --> 00:22:49,860 Felly, yr hyn rydym wedi ei wneud yw ein bod wedi darparu mewn gwirionedd i chi copy.c. 279 00:22:49,860 --> 00:22:57,610 Beth copy.c wneud yn unig yn gwneud copi union o ffeil bitmap a roddwyd ac wedyn allbynnau hynny. 280 00:22:57,610 --> 00:23:01,900 Felly, mae hyn eisoes yn agor y ffeil i chi, yn darllen yn picsel gan picsel, 281 00:23:01,900 --> 00:23:04,510 ac yna yn ysgrifennu mewn i mewn i ffeil allbwn. 282 00:23:04,510 --> 00:23:07,080 >> Gadewch i ni edrych ar hynny. 283 00:23:13,390 --> 00:23:18,290 Mae hyn yn sicrhau defnydd priodol, 284 00:23:18,290 --> 00:23:22,640 cael y filenames yma. 285 00:23:22,640 --> 00:23:29,940 Beth yw hyn yn ei fod yn gosod y ffeil mewnbwn i fod yr hyn rydym wedi cael llwyddiant mewn yn y infile yma, 286 00:23:29,940 --> 00:23:34,750 sydd yn ein hail gorchymyn-lein ddadl. 287 00:23:34,750 --> 00:23:37,640 Gwiriadau i wneud yn siŵr ein bod yn gallu agor y ffeil. 288 00:23:38,960 --> 00:23:44,860 Gwiriadau i wneud yn siŵr y gallwn ni wneud outfile newydd yma. 289 00:23:45,630 --> 00:23:53,270 Yna beth mae hyn yn ei wneud yma, 'i jyst yn y bôn yn dechrau darllen i mewn i'r ffeil didfap o'r dechrau. 290 00:23:53,270 --> 00:23:56,700 Y dechrau, fel y gwyddom, yn cynnwys y BITMAPFILEHEADER, 291 00:23:56,700 --> 00:24:03,200 ac felly bydd y dilyniannau o ddarnau uniongyrchol llenwch y BITMAPFILEHEADER. 292 00:24:03,200 --> 00:24:07,940 Felly beth sydd gennym yma yn dweud bod BF BITMAPFILEHEADER - 293 00:24:07,940 --> 00:24:13,150 sy'n ein amrywiol newydd o BITMAPFILEHEADER fath - 294 00:24:13,150 --> 00:24:22,560 rydym yn mynd i roi y tu mewn BF hyn yr ydym yn darllen o pwyntydd, sef ein infile. 295 00:24:22,560 --> 00:24:23,970 Faint rydyn ni'n darllen? 296 00:24:23,970 --> 00:24:32,160 Rydym yn darllen yn ôl faint o bytes mae angen i ni gynnwys y BITMAPFILEHEADER cyfan. 297 00:24:32,160 --> 00:24:34,660 Yn yr un modd, dyna beth rydym yn ei wneud ar gyfer y pennawd wybodaeth. 298 00:24:34,660 --> 00:24:39,010 Felly, rydym yn parhau hyd ein ffeil yn y infile, 299 00:24:39,010 --> 00:24:44,360 ac rydym yn darllen y darnau a bytes, ac rydym yn llenwi nhw'n uniongyrchol yn 300 00:24:44,360 --> 00:24:47,880 i mewn i'r achosion o'r newidynnau ein bod yn gwneud. 301 00:24:49,370 --> 00:24:53,800 Yma, rydym yn unig yn gwneud yn siwr bod y didfap yn Didfap. 302 00:24:57,670 --> 00:25:01,030 >> Nawr mae gennym outfile, dde? 303 00:25:01,030 --> 00:25:04,420 Felly, fel y mae pan fyddwn yn ei greu, ydyw yn y bôn yn wag. 304 00:25:04,420 --> 00:25:07,710 Felly, mae'n rhaid i ni yn y bôn yn creu didfap newydd o'r dechrau. 305 00:25:07,710 --> 00:25:12,280 Beth rydym yn ei wneud yw mae'n rhaid i ni wneud yn siŵr ein bod yn copïo yn y pennawd ffeil 306 00:25:12,280 --> 00:25:16,850 ac y pennawd gwybodaeth yn union fel y infile wedi. 307 00:25:16,850 --> 00:25:22,850 Beth rydym yn ei wneud yw byddwn yn ysgrifennu - a chofiwch fod BF yn y newidyn 308 00:25:22,850 --> 00:25:29,300 o BITMAPFILEHEADER fath, felly beth ydym yn ei wneud yw rydym yn unig yn defnyddio'r cynnwys 309 00:25:29,300 --> 00:25:34,980 i ysgrifennu i mewn i'r outfile. 310 00:25:36,550 --> 00:25:38,510 Yma, cofiwch buom yn siarad am padin, 311 00:25:38,510 --> 00:25:47,820 sut y mae'n bwysig gwneud yn siŵr fod y swm o picsel sydd gennym yn lluosrif o 4. 312 00:25:47,820 --> 00:25:52,790 Mae hwn yn fformiwla eithaf defnyddiol i gyfrifo faint o padin sydd gennych 313 00:25:52,790 --> 00:25:57,670 o ystyried y lled eich ffeil. 314 00:25:57,670 --> 00:26:04,120 Rwyf am i chi guys i gofio bod yn copy.c gennym fformiwla ar gyfer cyfrifo padin. 315 00:26:04,120 --> 00:26:07,970 Iawn? Felly mae pawb yn cofio hynny. Great. 316 00:26:07,970 --> 00:26:14,050 Felly, yna beth copy.c wneud nesaf yw ei ailadrodd dros yr holl scanlines. 317 00:26:14,050 --> 00:26:23,730 Mae'n mynd drwy'r rhesi yn gyntaf ac yna yn storio pob driphlyg ei fod yn darllen 318 00:26:23,730 --> 00:26:26,920 ac yna ysgrifennu i mewn i'r outfile. 319 00:26:26,920 --> 00:26:33,120 Felly, yna dyma ni yn darllen dim ond un RGB triphlyg ar y tro 320 00:26:33,120 --> 00:26:39,860 ac yna rhoi'r bod triphlyg un i mewn i'r outfile. 321 00:26:41,120 --> 00:26:48,340 Mae'r rhan anodd yw nad yw'r padin yn driphlyg RGB, 322 00:26:48,340 --> 00:26:55,200 ac felly ni allwn newydd ei ddarllen y swm hwnnw o padin treblu'r RGB. 323 00:26:55,200 --> 00:27:01,460 Beth mae'n rhaid i ni ei wneud mewn gwirionedd dim ond symud ein ffeil dangosydd sefyllfa, yn symud ein cyrchwr, 324 00:27:01,460 --> 00:27:06,840 i fath o sgip dros yr holl padin fel ein bod chi yn y rhes nesaf. 325 00:27:06,840 --> 00:27:12,990 Ac yna beth mae hyn yn ei wneud yw copi yn dangos i chi sut y gallech chi eisiau ychwanegu'r padin. 326 00:27:12,990 --> 00:27:14,990 Felly, rydym wedi cyfrifo faint o padin ei angen arnom, 327 00:27:14,990 --> 00:27:18,220 felly mae hynny'n golygu bod angen nifer o padding 0au. 328 00:27:18,220 --> 00:27:24,510 Beth yw hyn yn a ar gyfer dolen sy'n rhoi nifer o padin 0s i mewn i'n outfile. 329 00:27:24,510 --> 00:27:31,170 Ac yna yn olaf, byddwch yn cau'r ddwy ffeiliau. Byddwch yn cau'r infile yn ogystal â'r outfile. 330 00:27:31,170 --> 00:27:34,870 >> Felly dyna sut y copy.c yn gweithio, 331 00:27:34,870 --> 00:27:37,430 ac mae hynny'n mynd i fod yn eithaf defnyddiol. 332 00:27:39,720 --> 00:27:43,750 Yn hytrach na dim ond mewn gwirionedd yn uniongyrchol copïo a gludo yn 333 00:27:43,750 --> 00:27:46,800 neu dim ond yn edrych arno ac yn teipio i mewn beth bynnag yr ydych ei eisiau, 334 00:27:46,800 --> 00:27:49,440 efallai y byddwch jyst angen at chyflawna gorchymyn hwn yn y derfynell, 335 00:27:49,440 --> 00:27:54,520 cp copy.c whodunit.c, a fydd yn creu ffeil newydd, whodunit.c, 336 00:27:54,520 --> 00:27:58,330 sy'n cynnwys yr un cynnwys union fel copi yn ei wneud. 337 00:27:58,330 --> 00:28:03,880 Felly, yna beth y gallwn ei wneud yw defnyddio hynny fel fframwaith ar gyfer adeiladu a golygu 338 00:28:03,880 --> 00:28:06,900 ar gyfer ein ffeil whodunit. 339 00:28:08,500 --> 00:28:14,670 >> Mae'r rhain yn ein i-dos i'w wneud ar gyfer Whodunit, ond beth copy.c wneud 340 00:28:14,670 --> 00:28:16,730 mewn gwirionedd yn gofalu am y rhan fwyaf ohonynt i ni. 341 00:28:16,730 --> 00:28:21,900 Felly yr holl mae angen i ni ei wneud nesaf yw newid y picsel yn ôl yr angen 342 00:28:21,900 --> 00:28:25,920 i mewn gwirionedd yn gwneud y ffeil darllenadwy. 343 00:28:25,920 --> 00:28:32,960 Cofiwch fod am picsel a roddwyd triphlyg, felly ar gyfer newidyn penodol o RGBTRIPLE fath, 344 00:28:32,960 --> 00:28:35,990 gallwch weld y glas, gwerthoedd gwyrdd, a choch. 345 00:28:35,990 --> 00:28:38,670 Mae hynny'n mynd i ddod i mewn 'n hylaw oherwydd os gallwch gael gafael arnynt, 346 00:28:38,670 --> 00:28:41,770 sy'n golygu y gallwch hefyd eu gwirio, 347 00:28:41,770 --> 00:28:45,430 ac mae hynny'n golygu y gallwch hefyd eu newid. 348 00:28:45,430 --> 00:28:49,430 >> Felly pan fyddwn yn mynd yn ôl at ein henghraifft chwyddwydr coch, 349 00:28:49,430 --> 00:28:53,390 yn y bôn, yr oedd yn gweithredu fel rhyw fath o hidlo i ni. 350 00:28:53,390 --> 00:28:58,160 Felly, yr hyn rydym am ei wneud yw ein bod am i hidlo'r holl treblu'r sy'n dod i mewn 351 00:28:58,160 --> 00:29:01,240 Mae yna nifer o wahanol ffyrdd o wneud hyn. 352 00:29:01,240 --> 00:29:07,100 Yn y bôn, gallwch gael pa fath bynnag o hidlo ydych ei eisiau. 353 00:29:07,100 --> 00:29:09,890 Efallai eich bod am i newid yr holl picsel coch 354 00:29:09,890 --> 00:29:13,570 neu efallai eich bod am newid pixel lliw gwahanol i liw gwahanol. 355 00:29:13,570 --> 00:29:15,400 Mae hynny i fyny i chi. 356 00:29:15,400 --> 00:29:19,580 Cofiwch y gallwch wirio pa liw y picsel yn 357 00:29:19,580 --> 00:29:23,000 ac yna gallwch hefyd yn newid fel eich bod yn mynd drwyddo. 358 00:29:24,410 --> 00:29:26,420 >> Iawn. Felly dyna Whodunit. 359 00:29:26,420 --> 00:29:32,760 Unwaith y byddwch yn rhedeg Whodunit, byddwch yn gwybod pwy yw'r tramgwyddwr y drosedd oedd. 360 00:29:32,760 --> 00:29:35,540 >> Nawr rydym yn mynd i fynd i Newid maint. 361 00:29:35,540 --> 00:29:37,990 Rydym yn mynd i yn dal i fod yn delio â bitmaps. 362 00:29:37,990 --> 00:29:40,750 Beth ydym ni'n mynd i'w wneud yw ein bod yn mynd i gael mewnbwn didfap 363 00:29:40,750 --> 00:29:45,890 ac yna rydym yn mynd i basio mewn nifer, ac yna cael didfap outfile 364 00:29:45,890 --> 00:29:51,380 lle mae hynny'n bôn ein infile graddio gan n. 365 00:29:54,670 --> 00:30:01,450 Dweud fy ffeil yn ddim ond un picsel mawr. 366 00:30:01,450 --> 00:30:09,100 Yna, os bydd fy n oedd 3, scaling gan 3, yna byddwn yn ailadrodd y picsel n nifer o weithiau, 367 00:30:09,100 --> 00:30:14,410 felly 3 gwaith, ac yna hefyd ar raddfa i lawr 3 gwaith yn ogystal. 368 00:30:14,410 --> 00:30:17,840 Felly byddwch yn gweld rwy'n Gallwch ei fertigol yn ogystal ag yn llorweddol. 369 00:30:17,840 --> 00:30:19,680 >> Ac yna dyma enghraifft. 370 00:30:19,680 --> 00:30:27,590 Os oes gennych n = 2, byddwch yn gweld bod y pixel glas cyntaf yno dro ar ôl tro ddwy waith 371 00:30:27,590 --> 00:30:30,930 llorweddol hefyd fel ddwy waith fertigol. 372 00:30:30,930 --> 00:30:38,040 Ac yna mae hynny'n parhau ar, ac felly mae gennych cennu uniongyrchol o'ch ddelwedd wreiddiol gan ddau. 373 00:30:40,920 --> 00:30:47,600 >> Felly, yna pe baem yn manylu ar y pseudocode ar gyfer hyn, rydym am i agor y ffeil. 374 00:30:47,600 --> 00:30:49,880 Ac yna wybod os ydym yn mynd yn ôl yma, 375 00:30:49,880 --> 00:30:54,540 gallwn weld bod y lled ar gyfer y outfile yn mynd i fod yn wahanol na'r lled ar gyfer y infile. 376 00:30:54,540 --> 00:30:56,130 Beth mae hynny'n ei olygu? 377 00:30:56,130 --> 00:31:01,230 Mae hynny'n golygu bod ein gwybodaeth pennawd yn mynd i newid. 378 00:31:01,230 --> 00:31:03,790 Ac felly yr hyn fydd yr ydym am ei wneud yw diweddaru'r wybodaeth pennawd, 379 00:31:03,790 --> 00:31:11,820 gwybod pan fyddwn yn darllen yn y ffeiliau os ydych yn gweithredu ar y fframwaith copy.c, 380 00:31:11,820 --> 00:31:17,570 gennym eisoes newidyn sy'n dangos beth yw'r maint yn a phethau fel 'na. 381 00:31:17,570 --> 00:31:24,060 Felly, unwaith y byddwch wedi hynny, beth efallai y byddwch am ei wneud yw newid y newidynnau penodol. 382 00:31:24,060 --> 00:31:29,380 Cofiwch, os oes gennych strwythur, sut i gael gafael ar yr amrywiadau ym hynny. 383 00:31:29,380 --> 00:31:32,080 Byddwch yn defnyddio gweithredwr y dot, dde? 384 00:31:32,080 --> 00:31:36,420 Felly, yna gan ddefnyddio hynny, byddwch yn gwybod y byddi angen i chi newid y wybodaeth header. 385 00:31:36,480 --> 00:31:41,030 Felly dyma dim ond rhestr o'r elfennau gwirioneddol sy'n mynd i gael ei newid yn eich ffeil. 386 00:31:41,030 --> 00:31:45,180 Mae'r maint y ffeil yn mynd i gael ei newid, y llun, yn ogystal â lled a'r uchder. 387 00:31:45,180 --> 00:31:50,080 Felly, yna mynd yn ôl at y map o bitmaps, 388 00:31:50,080 --> 00:31:57,730 edrych i weld a yw'n pennawd ffeil neu y pennawd wybodaeth sy'n cynnwys y wybodaeth 389 00:31:57,730 --> 00:32:00,920 ac yna newid yn ôl yr angen. 390 00:32:05,010 --> 00:32:12,470 Unwaith eto, yn dweud cp copy.c resize.c. 391 00:32:12,470 --> 00:32:19,270 Mae hynny'n golygu bod resize.c bellach yn cynnwys popeth sydd ei gynnwys y tu mewn copi 392 00:32:19,270 --> 00:32:24,490 oherwydd bod copi yn rhoi i ni ffordd o ddarllen i mewn i bob picsel scanline gan picsel. 393 00:32:24,490 --> 00:32:29,860 Ac eithrio yn awr, yn hytrach na dim ond newid y gwerthoedd fel y gwnaethom yn Whodunit, 394 00:32:29,860 --> 00:32:37,980 hyn yr ydym am ei wneud yw ein bod eisiau ysgrifennu mewn picseli lluosog 395 00:32:37,980 --> 00:32:43,580 ar yr amod ein n yn fwy nag 1. 396 00:32:43,580 --> 00:32:47,110 >> Yna, yr hyn rydym am ei wneud yw ein bod am ymestyn ei llorweddol drwy n, 397 00:32:47,110 --> 00:32:50,490 yn ogystal ag ymestyn ei fertigol gan n. 398 00:32:50,490 --> 00:32:52,710 Sut y gallem wneud hyn? 399 00:32:52,710 --> 00:32:56,890 Dweud eich n yw 2 ac mae gennych y infile a roddir. 400 00:32:56,890 --> 00:32:58,730 Mae eich cyrchwr yn mynd i ddechrau ar yr un cyntaf, 401 00:32:58,730 --> 00:33:03,530 a beth rydych am ei wneud os n yw 2, rydych eisiau argraffu mewn 2 o'r rheiny. 402 00:33:03,530 --> 00:33:05,490 Felly, byddwch yn argraffu mewn 2 o'r rheiny. 403 00:33:05,490 --> 00:33:10,830 Yna eich cyrchwr yn mynd i symud i'r picsel nesaf, sef yr un goch, 404 00:33:10,830 --> 00:33:18,400 ac mae'n mynd i argraffu 2 o'r rheiny a rhai coch, atodi ef ar yr hyn y mae'n ei wneud o'r blaen. 405 00:33:18,400 --> 00:33:26,280 Yna bydd y cyrchwr yn symud i'r picsel nesaf a thynnu mewn 2 o'r rheiny. 406 00:33:26,280 --> 00:33:37,180 Os edrychwch yn ôl i fframwaith y copy.c, beth mae hyn yn ei wneud iawn yma 407 00:33:37,180 --> 00:33:42,830 mae'n creu achos newydd o driphlyg RGB, newidyn newydd o'r enw triphlyg. 408 00:33:42,830 --> 00:33:50,500 A dyma pan fydd yn darllen i mewn iddo, mae'n darllen o 1 infile RGBTRIPLE 409 00:33:50,500 --> 00:33:53,470 ac yn ei storio tu mewn y newidyn triphlyg. 410 00:33:53,470 --> 00:33:57,590 Felly, yna gennych mewn gwirionedd yn newidyn sy'n cynrychioli'r picsel penodol. 411 00:33:57,590 --> 00:34:05,290 Yna, pan fyddwch yn ysgrifennu, beth efallai y byddwch am ei wneud yw encase y datganiad fwrite i mewn i am ddolen 412 00:34:05,290 --> 00:34:11,080 sy'n ysgrifennu i mewn i'ch outfile gymaint o weithiau ag sydd ei angen. 413 00:34:17,449 --> 00:34:20,100 Mae hynny'n ddigon syml. 414 00:34:20,200 --> 00:34:27,590 Dim ond yn y bôn ailadrodd y broses ysgrifennu n nifer o weithiau er mwyn ei llorweddol. 415 00:34:27,590 --> 00:34:32,969 >> Ond yna mae'n rhaid i ni gofio bod ein padin yn mynd i newid. 416 00:34:47,350 --> 00:34:53,020 Yn flaenorol, yn dweud gennym rywbeth o hyd 3. 417 00:34:53,020 --> 00:35:00,130 Yna byddem yn unig yn ychwanegu o ran faint y padin? Dim ond un mwy i'w gwneud yn luosrif o 4. 418 00:35:00,130 --> 00:35:10,480 Ond yn dweud ein bod yn cennu y delwedd arbennig gan n = 2. 419 00:35:10,480 --> 00:35:16,300 Felly, yna byddai faint o picsel glas gennym ar y diwedd? Byddai gennym 6. 420 00:35:16,300 --> 00:35:21,470 1, 2, 3, 4, 5, 6. Mae pob hawl. 421 00:35:21,470 --> 00:35:26,580 6 Nid yw lluosrif o 4. Beth yw'r lluosrif agosaf o 4? Mae hynny'n mynd i fod yn 8. 422 00:35:26,580 --> 00:35:33,200 Felly, rydym yn wir yn mynd i gael 2 gymeriadau o padding yno. 423 00:35:33,200 --> 00:35:38,720 >> A oes unrhyw un yn cofio os oes gennym fformiwla i gyfrifo padin 424 00:35:38,720 --> 00:35:41,350 a lle y gallai hynny fod? 425 00:35:41,350 --> 00:35:45,160 [Ymateb y myfyrwyr Anghlywadwy] >> Yeah, copy.c. Hawl. 426 00:35:45,160 --> 00:35:49,800 Mae fformiwla ym copy.c i gyfrifo faint o padin sydd gennych 427 00:35:49,800 --> 00:35:53,810 cael lled penodol o'r ddelwedd didfap. 428 00:35:53,810 --> 00:36:02,950 Felly, yna mae hynny'n mynd i fod yn ddefnyddiol pan fydd angen i chi ychwanegu rhywfaint o padin 429 00:36:02,950 --> 00:36:06,160 i mewn gwirionedd yn ffigwr allan faint o padin angen i chi ei ychwanegu. 430 00:36:10,820 --> 00:36:15,850 Ond un nodyn, fodd bynnag, yw eich bod am wneud yn siŵr eich bod chi'n defnyddio'r maint cywir. 431 00:36:15,850 --> 00:36:21,410 Dim ond byddwch yn ofalus oherwydd eich bod yn y bôn yn mynd i fod yn delio gyda dau delweddau didfap. 432 00:36:21,410 --> 00:36:23,410 Byddwch am wneud yn siŵr eich bod yn defnyddio yr un cywir. 433 00:36:23,410 --> 00:36:26,820 Pan fyddwch chi'n cyfrifo y padin ar gyfer y outfile, rydych am ei ddefnyddio lled y outfile 434 00:36:26,820 --> 00:36:29,860 ac nid lled yr un blaenorol. 435 00:36:29,860 --> 00:36:37,240 >> Great. Y math hwnnw o yn gofalu am ymestyn delwedd bitmap cyfan yn llorweddol. 436 00:36:37,240 --> 00:36:41,290 Ond yr hyn rydym am ei wneud yw mewn gwirionedd yn ymestyn ei fertigol yn ogystal. 437 00:36:41,290 --> 00:36:48,760 Mae hyn yn mynd i fod ychydig yn fwy anodd oherwydd pan ydym wedi gorffen copïo rhes 438 00:36:48,760 --> 00:36:51,580 ac ysgrifennu y rhes, mae ein cyrchwr yn mynd i fod ar y diwedd. 439 00:36:51,580 --> 00:36:56,210 Felly, os ydym yn darllen eto, yna mae'n dim ond yn mynd i ddarllen i mewn i'r llinell nesaf. 440 00:36:56,210 --> 00:37:03,660 Felly, yr hyn rydym am ei wneud yn fath o ddod o hyd i ffordd o gopïo rhai rhesi eto 441 00:37:03,660 --> 00:37:12,500 neu dim ond math o gymryd y rhes ac yna ailysgrifennu eto. 442 00:37:14,380 --> 00:37:17,940 Fel yr wyf yn fath o gyfeirio at, mae yna sawl ffordd wahanol o wneud hyn. 443 00:37:17,940 --> 00:37:23,040 Beth allech chi ei wneud yw wrth i chi fynd trwy a darllen drwy'r scanline penodol 444 00:37:23,040 --> 00:37:28,560 ac yn ei newid yn ôl yr angen, yna fath o siop pawb picsel mewn arae. 445 00:37:28,560 --> 00:37:36,350 Yna, yn ddiweddarach eich bod yn gwybod y bydd angen i chi argraffu y casgliad unwaith eto, 446 00:37:36,350 --> 00:37:39,830 ac felly gallwch ddefnyddio'r amrywiaeth i wneud hynny. 447 00:37:39,830 --> 00:37:44,500 Ffordd arall o wneud hyn yw y gallech chi i lawr un rhes, 448 00:37:44,500 --> 00:37:47,950 deall bod angen i chi gopïo hynny eto, felly mewn gwirionedd yn symud eich cyrchwr, 449 00:37:47,950 --> 00:37:50,950 ac mae hynny'n mynd i fod yn defnyddio'r dull fseek. 450 00:37:50,950 --> 00:37:56,410 Gallech symud eich cyrchwr yr holl ffordd yn ôl ac yna ailadrodd y broses copi eto. 451 00:37:56,410 --> 00:38:03,960 >> Felly, os yw ein rhif graddio yn n, yna byddai faint o weithiau y mae'n rhaid i ni fynd yn ôl 452 00:38:03,960 --> 00:38:10,500 ac ailysgrifennu llinell? >> [Myfyrwyr] n - 1. >> Yeah, perffaith. n - 1. 453 00:38:10,500 --> 00:38:14,390 Rydym wedi gwneud hyn unwaith yn barod, felly, yna byddwn yn awyddus i ailadrodd y broses troi'n ôl 454 00:38:14,390 --> 00:38:17,460 n - 1 swm o weithiau. 455 00:38:22,730 --> 00:38:25,860 Iawn. Felly, mae gennych eich swyddogaeth newid maint. 456 00:38:25,860 --> 00:38:34,360 >> Nawr gallwn gael i ran llawer o hwyl, fy hoff pset, sy'n Adfer. 457 00:38:34,360 --> 00:38:39,580 Yn hytrach na bitmaps, y tro hwn rydym yn delio â JPEG. 458 00:38:39,580 --> 00:38:43,370 Nid ydym yn rhoi gwirionedd ffeil yn unig o JPEG, 459 00:38:43,370 --> 00:38:46,600 rydym yn y bôn yn rhoi fformat cerdyn cof amrwd. 460 00:38:46,600 --> 00:38:51,790 Ac felly mae hyn yn cynnwys ychydig o werthoedd gwybodaeth a garbage yn y dechrau, 461 00:38:51,790 --> 00:38:57,240 ac yna bydd yn dechrau ac mae ganddo criw o ffeiliau JPEG. 462 00:38:57,240 --> 00:39:03,430 Fodd bynnag, rydym yn rhoi cerdyn lle'r ydym wedi dileu y lluniau; 463 00:39:03,430 --> 00:39:08,300 yn y bôn, rydym wedi anghofio lle mae'r lluniau yn cael eu lleoli o fewn y cerdyn. 464 00:39:08,300 --> 00:39:12,770 Felly, ein gwaith wedyn yn Adfer yw i fynd drwy'r fformat cerdyn 465 00:39:12,770 --> 00:39:16,500 a dod o hyd i'r lluniau eto. 466 00:39:16,500 --> 00:39:23,990 >> Yn ffodus, mae strwythur o ffeiliau JPEG a'r ffeil cerdyn yn ychydig yn ddefnyddiol. 467 00:39:23,990 --> 00:39:28,850 Mae'n gallai amheuaeth, wedi bod ychydig yn fwy anodd os nad oedd yn y fformat penodol. 468 00:39:28,850 --> 00:39:40,160 Mae pob ffeil JPEG mewn gwirionedd yn dechrau gyda dau dilyniannau posibl, a restrir uchod. 469 00:39:40,160 --> 00:39:42,970 Yn y bôn, pryd bynnag y byddwch gennych ffeil JPEG newydd, 470 00:39:42,970 --> 00:39:52,720 yn dechrau gyda naill ai y dilyniant ffd8 ffe0 neu un arall, ffd8 ffe1. 471 00:39:52,720 --> 00:39:59,530 Peth arall ddefnyddiol i wybod yw bod JPEG yn cael eu storio contiguously. 472 00:39:59,530 --> 00:40:03,380 Felly, pryd bynnag 1 ffeil JPEG dod i ben, mae'r un arall yn dechrau. 473 00:40:03,380 --> 00:40:07,070 Felly, nid oes unrhyw fath o mewn-rhwng gwerthoedd yno. 474 00:40:07,070 --> 00:40:15,510 Unwaith i chi gyrraedd y dechrau JPEG, os ydych chi eisoes wedi bod yn darllen a JPEG, 475 00:40:15,510 --> 00:40:21,800 eich bod yn gwybod eich bod wedi taro ar ddiwedd yr un blaenorol a dechrau'r un nesaf. 476 00:40:21,800 --> 00:40:25,890 >> I fath o ddelweddu hyn, fe wnes i sgematig. 477 00:40:25,890 --> 00:40:36,910 Peth arall am JPEG yw y gallwn eu darllen mewn dilyniannau o 512 bytes ar y tro, 478 00:40:36,910 --> 00:40:39,380 yn yr un modd â dechrau'r y cerdyn. 479 00:40:39,380 --> 00:40:43,370 Nid oes angen i ni gael eu gwirio bob beit unigol gan y byddai hynny'n sugno. 480 00:40:43,370 --> 00:40:48,200 Felly, yn hytrach, yr hyn y gallwn ei wneud yw mewn gwirionedd newydd ei ddarllen mewn 512 bytes ar y tro 481 00:40:48,200 --> 00:40:54,700 ac yna, yn hytrach na gwirio yn rhwng y rhai yn y sleisys ychydig bach, 482 00:40:54,700 --> 00:40:58,640 gallwn ni edrychwch ar y dechrau y 512 bytes. 483 00:40:58,640 --> 00:41:02,570 Yn y bôn, yn y llun, yr hyn a welwch yn y dechrau y cerdyn, 484 00:41:02,570 --> 00:41:08,700 gennych werthoedd nad ydynt yn wir yn berthnasol i'r JPEG gwirioneddol eu hunain. 485 00:41:08,700 --> 00:41:15,830 Ond yna yr hyn sydd gennyf yn seren i ddynodi un o'r ddau dilyniannau cychwyn ar gyfer JPEG. 486 00:41:15,830 --> 00:41:19,910 Felly, pryd bynnag y byddwch yn gweld seren, byddwch yn gwybod bod gennych ffeil JPEG. 487 00:41:19,910 --> 00:41:25,030 Ac yna bob ffeil JPEG yn mynd i fod yn rhai lluosog o 512 bytes 488 00:41:25,030 --> 00:41:27,880 ond nid o reidrwydd yr un lluosog. 489 00:41:27,880 --> 00:41:32,050 Mae'r modd yr ydych yn gwybod eich bod wedi taro arall JPEG yw os byddwch yn taro arall seren, 490 00:41:32,050 --> 00:41:39,090 arall dilyniant cychwyn bytes. 491 00:41:39,090 --> 00:41:43,330 Yna, yr hyn yr ydych wedi yma yw, mae gennych y ffeil JPEG coch yn parhau hyd nes y byddwch yn taro seren, 492 00:41:43,330 --> 00:41:45,150 sy'n cael ei nodi gan lliw newydd. 493 00:41:45,150 --> 00:41:48,510 Byddwch yn parhau ac yna byddwch yn taro arall seren, byddwch yn taro arall JPEG, 494 00:41:48,510 --> 00:41:50,590 byddwch yn parhau yr holl ffordd hyd at y diwedd. 495 00:41:50,590 --> 00:41:53,180 Rydych chi ar y llun olaf yma, yr un pinc. 496 00:41:53,180 --> 00:41:58,220 Rydych yn mynd i ben tan i chi gyrraedd y diwedd cymeriad ffeil. 497 00:41:58,220 --> 00:42:00,820 Mae hyn yn mynd i fod yn wirioneddol ddefnyddiol. 498 00:42:00,820 --> 00:42:03,170 >> Mae siopau cludfwyd ychydig o brif yma: 499 00:42:03,170 --> 00:42:06,670 Nid yw'r ffeil cerdyn yn dechrau gyda JPEG, 500 00:42:06,670 --> 00:42:13,350 ond unwaith y JPEG dechrau, yr holl JPEG yn cael eu cadw ochr yn ochr â'i gilydd. 501 00:42:17,520 --> 00:42:20,420 >> Mae rhai pseudocode ar gyfer y Adfer. 502 00:42:20,420 --> 00:42:22,570 Yn gyntaf, rydym yn mynd i agor ein ffeil cerdyn, 503 00:42:22,570 --> 00:42:27,500 ac mae hynny'n mynd i fod yn defnyddio ein ffeil I / O swyddogaethau. 504 00:42:27,500 --> 00:42:32,430 Rydym yn mynd i ailadrodd y broses ganlynol hyd nes y byddwn wedi cyrraedd diwedd y ffeil. 505 00:42:32,430 --> 00:42:36,450 Rydym yn mynd i ddarllen 512 bytes ar y tro. 506 00:42:36,450 --> 00:42:39,180 A hyn a ddywedais yma yw ein bod yn mynd i storio mewn byffer, 507 00:42:39,180 --> 00:42:46,230 felly yn y bôn ddal gafael ar y rhai 512 bytes nes ein bod yn gwybod yn union beth i'w wneud â nhw. 508 00:42:46,230 --> 00:42:50,300 Yna, yr hyn rydym am ei wneud yw ein bod am weld a ydym wedi taro seren neu beidio. 509 00:42:50,300 --> 00:42:57,960 Os ydym wedi taro yn seren, os ydym wedi taro un o'r dilyniannau cychwyn, 510 00:42:57,960 --> 00:42:59,980 yna rydym yn gwybod ein bod wedi taro ffeil JPEG newydd. 511 00:42:59,980 --> 00:43:08,860 Beth bydew 'am ei wneud yw ein bod yn mynd i eisiau i greu ffeil newydd yn ein cyfeiriadur pset4 512 00:43:08,860 --> 00:43:14,480 i barhau i wneud y ffeil. 513 00:43:14,480 --> 00:43:18,220 Ond hefyd, os ydym wedi gwneud eisoes JPEG o'r blaen, 514 00:43:18,220 --> 00:43:25,620 yna rydym eisiau rhoi terfyn ar y ffeil ac yn gwthio i'r ffolder pset4, 515 00:43:25,620 --> 00:43:29,780 lle bydd gennym y ffeil ei storio oherwydd os nad ydym yn nodi ein bod ni wedi dod i ben y ffeil JPEG, 516 00:43:29,780 --> 00:43:37,290 yna byddwn yn y bôn yn cael swm amhenodol. Ni fydd y JPEG dod i ben. 517 00:43:37,290 --> 00:43:40,840 Felly, rydym am wneud yn siŵr bod pan fyddwn yn darllen i mewn i ffeil JPEG ac ysgrifennu hynny, 518 00:43:40,840 --> 00:43:46,590 ydym am gau'r benodol er mwyn agor yr un nesaf. 519 00:43:46,590 --> 00:43:48,430 Byddwn am wirio nifer o bethau. 520 00:43:48,430 --> 00:43:52,880 Rydym yn awyddus i weld a ydym ni'n ar ddechrau a JPEG newydd gyda'n byffer 521 00:43:52,880 --> 00:43:56,780 a hefyd os ydym eisoes wedi dod o hyd JPEG cyn 522 00:43:56,780 --> 00:44:03,930 oherwydd bydd hynny'n newid eich proses ychydig. 523 00:44:03,930 --> 00:44:07,880 Felly, yna ar ôl i chi fynd trwy'r holl ffordd ac rydych yn taro ar ddiwedd y ffeil, 524 00:44:07,880 --> 00:44:11,570 yna beth youll 'angen at gwna ydy youll' angen at gau'r holl ffeiliau sydd ar hyn o bryd ar agor. 525 00:44:11,570 --> 00:44:14,100 Dyna fydd y ffeil JPEG olaf sydd gennych, 526 00:44:14,100 --> 00:44:18,930 yn ogystal â'r ffeil cerdyn eich bod wedi bod yn delio â. 527 00:44:21,940 --> 00:44:28,670 >> Y rhwystr olaf y mae angen i ni fynd i'r afael yw sut i mewn gwirionedd yn gwneud ffeil JPEG 528 00:44:28,670 --> 00:44:31,950 a sut i wthio mewn gwirionedd i'r ffolder. 529 00:44:33,650 --> 00:44:39,850 Mae'r pset ei gwneud yn ofynnol bod pob JPEG eich bod yn dod o hyd i fod yn y fformat canlynol, 530 00:44:39,850 --> 00:44:43,990 lle mae gennych y rhif. jpg. 531 00:44:43,990 --> 00:44:50,750 Mae nifer, hyd yn oed os yw'n 0, rydym yn galw ei 000.jpg. 532 00:44:50,750 --> 00:44:55,730 Pryd bynnag y byddwch ddod o hyd i JPEG yn eich rhaglen, 533 00:44:55,730 --> 00:44:58,040 ydych yn mynd i eisiau ei enwi yn y drefn y mae'n dod o hyd. 534 00:44:58,040 --> 00:44:59,700 Beth yw ystyr hyn? 535 00:44:59,700 --> 00:45:03,530 Mae angen i fath o gadw golwg ar faint o ydym wedi dod o hyd 536 00:45:03,530 --> 00:45:08,680 a'r hyn y dylai'r nifer o bob JPEG fod. 537 00:45:08,680 --> 00:45:13,800 Yma rydym yn mynd i fanteisio ar y swyddogaeth sprintf. 538 00:45:13,800 --> 00:45:17,480 Yn debyg i printf, a dim ond math o brintiau gwerth allan i'r derfynfa, 539 00:45:17,480 --> 00:45:23,910 sprintf argraffu'r ffeiliau y tu allan i mewn i'r ffolder. 540 00:45:23,910 --> 00:45:30,870 Ac felly beth fyddai hyn yn ei wneud pe bai gen i sprintf, teitl, ac yna y llinyn yno, 541 00:45:30,870 --> 00:45:36,660 byddai'n argraffu 2.jpg. 542 00:45:36,660 --> 00:45:41,020 Gan dybio fy mod i wedi cau fy ffeiliau yn gywir, 543 00:45:41,020 --> 00:45:47,210 a fyddai'n cynnwys y ffeil fy mod wedi bod yn ysgrifennu allan. 544 00:45:47,210 --> 00:45:50,320 Ond un peth yw bod y cod sydd gennyf yma 545 00:45:50,320 --> 00:45:53,360 nid yw'n hollol bodloni'r hyn y mae'r pset ei gwneud yn ofynnol. 546 00:45:53,360 --> 00:46:02,410 Mae'r pset ei gwneud yn ofynnol bod y ffeil JPEG ail enwi 002 yn hytrach na dim ond 2. 547 00:46:02,410 --> 00:46:09,160 Felly, pan fyddwch yn argraffu'r enw, yna efallai efallai y byddwch am newid y placeholder ychydig. 548 00:46:09,160 --> 00:46:18,140 >> Oes unrhyw un yn cofio sut y gallwn ganiatáu ar gyfer mannau ychwanegol pan fyddwn argraffu rhywbeth? 549 00:46:18,140 --> 00:46:22,530 Yeah. >> [Myfyrwyr] Rydych yn rhoi 3 rhwng yr arwydd y cant a 2. >> Yeah, perffaith. 550 00:46:22,530 --> 00:46:25,610 Byddwch yn rhoi 3 yn yr achos hwn oherwydd ein bod eisiau lle i 3. 551 00:46:25,610 --> 00:46:32,590 Byddai 3d% yn ôl pob tebyg yn rhoi i chi 002.jpg yn hytrach na 2. 552 00:46:32,590 --> 00:46:40,120 Mae'r ddadl gyntaf i'r swyddogaeth sprintf mewn gwirionedd amrywiaeth torgoch, 553 00:46:40,120 --> 00:46:42,520 yr ydym eisoes yn gwybod fel llinynnau. 554 00:46:42,520 --> 00:46:50,700 Mae'r rhai ewyllys, math o fwy fel storio dros dro, dim ond storio y llinyn canlyniadol. 555 00:46:50,700 --> 00:46:54,950 Ni fyddwch mewn gwirionedd yn delio â hyn, ond mae angen i chi ei gynnwys. 556 00:46:54,950 --> 00:47:00,710 >> Mae gwybod bod pob enw ffeil y rhif, sydd yn cymryd i fyny tri chymeriad, 557 00:47:00,710 --> 00:47:06,770 ac yna. jpg, dylai pa mor hir y casgliad fod? 558 00:47:09,070 --> 00:47:14,310 Taflwch allan yn rhif. Faint o gymeriadau yn y teitl, yn yr enw? 559 00:47:18,090 --> 00:47:26,320 Felly mae 3 hashtags, cyfnod, jpg. >> [Myfyrwyr] 7. >> 7. Ddim yn hollol. 560 00:47:26,320 --> 00:47:32,000 Rydym yn mynd i eisiau 8 oherwydd rydym am i ganiatáu ar gyfer y terminator null yn ogystal. 561 00:47:45,340 --> 00:47:49,730 >> Yn olaf, dim ond i dynnu allan y broses y byddwch chi'n ei wneud am Adfer, 562 00:47:49,730 --> 00:47:55,420 gennych rywfaint o wybodaeth dechrau. 563 00:47:55,420 --> 00:48:02,460 Byddwch yn parhau nes i chi ddod o hyd i'r dechrau o ffeil JPEG, 564 00:48:02,460 --> 00:48:07,900 a gall hynny fod naill ai un o ddau dilyniannau cychwyn. 565 00:48:07,900 --> 00:48:12,510 Rydych yn cadw ar ddarllen. Mae pob slaes yma yn cynrychioli 512 bytes. 566 00:48:12,510 --> 00:48:22,630 Rydych yn cadw ar ddarllen, parhewch i ddarllen hyd nes y byddwch yn dod ar draws un arall dilyniant cychwyn. 567 00:48:22,630 --> 00:48:29,790 Unwaith y byddwch wedi bod, fyddwch chi'n gorffen y JPEG ar hyn o bryd - yn yr achos hwn, mae'n un goch, 568 00:48:29,790 --> 00:48:31,030 felly yr ydych am ben hynny. 569 00:48:31,030 --> 00:48:35,540 Rydych am sprintf enw'r hynny yn eich ffolder pset4, 570 00:48:35,540 --> 00:48:41,580 yna rydych am agor JPEG newydd ac yna parhewch i ddarllen 571 00:48:41,580 --> 00:48:46,370 hyd nes y byddwch yn dod ar draws y nesaf. 572 00:48:46,370 --> 00:48:49,040 Cadwch ar darllen, cadw ar ddarllen, 573 00:48:49,040 --> 00:48:56,290 ac yna yn olaf, yn y pen draw, rydych chi'n mynd i gyrraedd diwedd y ffeil, 574 00:48:56,290 --> 00:49:00,360 ac felly youll 'angen at gau'r JPEG diwethaf eich bod yn gweithio gyda, 575 00:49:00,360 --> 00:49:08,380 sprintf hynny yn eich ffolder pset4, ac yna edrych ar yr holl luniau yr ydych wedi gotten. 576 00:49:08,380 --> 00:49:12,050 Mae'r rhai lluniau mewn gwirionedd yn lluniau o CS50 staff, 577 00:49:12,050 --> 00:49:16,430 ac felly dyma lle mae'r bonws yn rhan o'r hwyl pset yn dod i mewn 578 00:49:16,430 --> 00:49:26,310 yw eich bod yn cystadlu yn eich adrannau i ddod o hyd i'r TFS yn y lluniau 579 00:49:26,310 --> 00:49:34,610 ac yn cymryd lluniau gyda hwy i brofi eich bod wedi gwneud y pset 580 00:49:34,610 --> 00:49:37,030 ac fel y gallwch weld pa aelodau staff yn y lluniau. 581 00:49:37,030 --> 00:49:41,510 Felly, yna i chi gymryd lluniau gyda'r staff. Weithiau, bydd rhaid i chi fynd ar i lawr. 582 00:49:41,510 --> 00:49:44,680 Mae'n debyg y bydd rhai ohonynt yn ceisio rhedeg i ffwrdd oddi wrthych. 583 00:49:44,680 --> 00:49:47,320 Byddwch yn cymryd lluniau gyda nhw. 584 00:49:47,320 --> 00:49:51,190 Mae hyn yn parhau. Dyw hi ddim yn ddyledus pan fydd y pset yn ddyledus. 585 00:49:51,190 --> 00:49:53,340 Bydd y dyddiad cau yn cael eu cyhoeddi yn y fanyleb. 586 00:49:53,340 --> 00:49:58,060 Yna, ynghyd â'ch adran, pa un bynnag adran yn cymryd y lluniau mwyaf 587 00:49:58,060 --> 00:50:04,430 Bydd gyda'r aelodau staff mwyaf yn ennill gwobr 'n bert awesome. 588 00:50:04,430 --> 00:50:08,890 Dyna fath o gymhelliad i gael eich pset4 orffen cyn gynted ag y bo modd 589 00:50:08,890 --> 00:50:10,820 oherwydd wedyn gallwch chi fynd i lawr i fusnes 590 00:50:10,820 --> 00:50:14,570 hela i lawr yr holl aelodau staff gwahanol CS50. 591 00:50:14,570 --> 00:50:17,500 Nid yw hynny'n orfodol, fodd bynnag, felly ar ôl i chi gael y lluniau, 592 00:50:17,500 --> 00:50:20,310 yna rydych wedi eu gorffen gyda pset4. 593 00:50:20,310 --> 00:50:23,970 >> A dwi'n gorffen gyda Walkthrough 4, felly diolch i chi gyd am ddod. 594 00:50:23,970 --> 00:50:29,330 Pob lwc gyda'r Fforensig. [Cymeradwyaeth] 595 00:50:29,330 --> 00:50:31,000 [CS50.TV]