1 00:00:00,000 --> 00:00:09,500 >> [Musika jotzen] 2 00:00:09,500 --> 00:00:12,350 >> ZAMYLA Chan: Miss Scarlett zen kandela-rekin. 3 00:00:12,350 --> 00:00:13,560 Whodunit? 4 00:00:13,560 --> 00:00:15,030 Beno, jakiteko goaz. 5 00:00:15,030 --> 00:00:20,870 Taula joko Pista batean, baliteke emango irudia gorri fisiko bat. 6 00:00:20,870 --> 00:00:24,120 Eta irudi hori oso gorria da spotty, eta zure lana da 7 00:00:24,120 --> 00:00:25,490 ezkutuko mezua agerian. 8 00:00:25,490 --> 00:00:29,740 Eta, normalean, zu gorri bat ematen lupa, edo pantaila gorri bat 9 00:00:29,740 --> 00:00:31,410 ezkutuko mezua bat agerian. 10 00:00:31,410 --> 00:00:33,340 Beno, hori imitatzen goaz. 11 00:00:33,340 --> 00:00:37,960 >> Whodunit batean, bitmap irudi bat ematen ari zarela oso spotty eta gorria itxura, 12 00:00:37,960 --> 00:00:43,430 eta ondoren whodunit programa exekutatu ezkutuko mezu bat ager dadin. 13 00:00:43,430 --> 00:00:45,650 >> Hargatik apurtu honetan urrats sartu. 14 00:00:45,650 --> 00:00:50,390 Lehenik eta behin, fitxategia ireki nahi duzun - duzula eman arrastoren. 15 00:00:50,390 --> 00:00:53,880 Eta gero ere sortuko Epaia bitmap fitxategiak. 16 00:00:53,880 --> 00:00:58,240 Gero bitmap eguneratu nahiko dituzu goiburua epaia outfile info. 17 00:00:58,240 --> 00:00:59,920 Hori aurrerago gehiago. 18 00:00:59,920 --> 00:01:04,319 Eta gero zu hemen sartu irakurtzen joan ideiarik, scanline, pixel pixel, 19 00:01:04,319 --> 00:01:07,320 pixel koloreak aldaketarena beharrezkoa eta idatziz, 20 00:01:07,320 --> 00:01:08,960 epaia sartu horiek - 21 00:01:08,960 --> 00:01:12,000 pixel pixel sartu Epaia scanline. 22 00:01:12,000 --> 00:01:13,780 >> Nola ez, honi buruz joan hasten gara? 23 00:01:13,780 --> 00:01:16,940 Beno, zorionez, copy.c dugu banaketa-kodea. 24 00:01:16,940 --> 00:01:21,240 Eta hori frogatzeko joan nahiko guretzat erabilgarria. 25 00:01:21,240 --> 00:01:29,700 Copy.c fitxategi bat irekitzen du, izan ere, irakurtzen du infile en goiburua, eta, gero, eguneratu egiten du 26 00:01:29,700 --> 00:01:31,070 outfile en goiburua. 27 00:01:31,070 --> 00:01:37,010 Eta ondoren pixel bakoitzeko irakurtzen diren scanline, pixel pixel, eta, ondoren, 28 00:01:37,010 --> 00:01:42,390 pixel horretan idazten du outfile sartu. 29 00:01:42,390 --> 00:01:45,020 >> Beraz, zure lehenengo urratsa agian izan ondorengo exekutatu 30 00:01:45,020 --> 00:01:46,420 terminalean komando - 31 00:01:46,420 --> 00:01:50,270 cp copy.c whodunit.c. 32 00:01:50,270 --> 00:01:55,320 Horren kopia bat sortuko du copy.c izeneko whodunit.c. 33 00:01:55,320 --> 00:01:58,320 Beraz, ireki gure lehen urratsa fitxategia, bai, ez da zehatza 34 00:01:58,320 --> 00:02:00,070 duen erreplika copy.c. in 35 00:02:00,070 --> 00:02:03,360 Beraz, zuk utzi dut nahi hori begiratu. 36 00:02:03,360 --> 00:02:07,860 >> Zer dugu aurre ari da pset honetan fitxategia / I, funtsean fitxategiak hartuta, 37 00:02:07,860 --> 00:02:10,229 , irakurketa, idazketa, horiek editatzen. 38 00:02:10,229 --> 00:02:12,650 Nola ez, lehen aldiz irekitzen duzunean fitxategi batean? 39 00:02:12,650 --> 00:02:16,800 Beno, ari zaren fitxategia bat aldarrikatu zoazen erakuslea, eta gero deitzen 40 00:02:16,800 --> 00:02:18,670 funtzioa fopen. 41 00:02:18,670 --> 00:02:23,150 Bidea, edo horren izenean gainditu fitxategia, eta, ondoren, nahi duzun modua 42 00:02:23,150 --> 00:02:24,700 fitxategi hori irekitzeko sartu 43 00:02:24,700 --> 00:02:28,620 R batean pasatzen zabalduko da irakurtzeko foo.bmp. 44 00:02:28,620 --> 00:02:35,670 Berriz w batean pasatzen fopen izango bar.bmp irekia, fitxategia idazteko eta 45 00:02:35,670 --> 00:02:37,020 benetan da editatzen. 46 00:02:37,020 --> 00:02:41,970 >> Beraz, orain espedientea ireki dugu, gure hurrengo urratsa da goiburuaren informazio eguneratzeko 47 00:02:41,970 --> 00:02:43,230 outfile da. 48 00:02:43,230 --> 00:02:44,610 Zer da goiburuaren informazio bat? 49 00:02:44,610 --> 00:02:48,160 Beno, lehenik eta behin jakin behar dugu zer bit-mapa bat da. 50 00:02:48,160 --> 00:02:51,000 Bitmap sinple bat besterik ez da byte antolamendua. 51 00:02:51,000 --> 00:02:55,480 Eta fitxategi horretan ari dira deklaratu Hemen, bmp.h, sorta bat 52 00:02:55,480 --> 00:02:58,610 zer bitmap baten informazio benetan egindako. 53 00:02:58,610 --> 00:03:05,730 Baina zer axola benetan gara da Bitmap fitxategia goiburua, hementxe, eta 54 00:03:05,730 --> 00:03:08,460 the bitmap info goiburua, hemen baino gehiago. 55 00:03:08,460 --> 00:03:13,170 Goiburua pare bat osatzen dute aldagai hori oso baliagarria izango da. 56 00:03:13,170 --> 00:03:18,400 Ez dago biSizeImage, hau da, bytetan irudiaren tamaina guztira. 57 00:03:18,400 --> 00:03:20,890 Eta horretan sartzen pixel eta betegarria. 58 00:03:20,890 --> 00:03:24,210 Betegarria oso garrantzitsua da, baina hori ikusiko dugu geroago. 59 00:03:24,210 --> 00:03:30,000 >> BiWidth zabalera adierazten pixel ken betegarria irudia. 60 00:03:30,000 --> 00:03:34,220 BiHeight da gero ere altuera pixeletan irudiaren. 61 00:03:34,220 --> 00:03:38,240 Eta gero BITMAPFILEHEADER eta BITMAPINFOHEADER, aipatu dut 62 00:03:38,240 --> 00:03:40,900 lehenago, horietan irudikatzen dira structs gisa. 63 00:03:40,900 --> 00:03:45,410 Beraz, ezin duzu fitxategia goiburua sartzeko berez, baina lortu nahi duzu 64 00:03:45,410 --> 00:03:47,370 aldagai horiek barruan. 65 00:03:47,370 --> 00:03:48,170 >> Ados. 66 00:03:48,170 --> 00:03:50,600 Beraz, nola eguneratu dugu header info? 67 00:03:50,600 --> 00:03:54,020 Beno, lehenik ikusiko dugu ala ez dugu edozein informazio aldatu behar 68 00:03:54,020 --> 00:03:58,480 infile, arrastoren, joan outfile, epaia. 69 00:03:58,480 --> 00:04:00,250 Kasu honetan da ezer aldatu? 70 00:04:00,250 --> 00:04:04,320 Beno, ez da benetan, goaz delako beharreko koloreak besterik aldatzen. 71 00:04:04,320 --> 00:04:07,550 Ez ari gara fitxategia aldatuz joan tamaina, irudiaren tamaina, zabalera, 72 00:04:07,550 --> 00:04:08,310 edo altuera. 73 00:04:08,310 --> 00:04:14,010 Beraz, oraingoz eskuin guztiek besterik pixel bakoitzean kopiatzea. 74 00:04:14,010 --> 00:04:14,840 >> Ados. 75 00:04:14,840 --> 00:04:20,720 Beraz, orain dezagun nola dugu benetan at pixel bakoitzean irakur daiteke fitxategi batetik. 76 00:04:20,720 --> 00:04:23,640 Beste fitxategi bat S / I funtzioa egingo play sartuko da - 77 00:04:23,640 --> 00:04:24,700 fread. 78 00:04:24,700 --> 00:04:28,440 Hartzen erakuslea da egiturari joan duten byte edukiko duten 79 00:04:28,440 --> 00:04:30,110 irakurtzen ari zaren. 80 00:04:30,110 --> 00:04:31,890 Beraz, sartu irakurtzen ari zaren. 81 00:04:31,890 --> 00:04:36,090 Eta ondoren gainditu tamaina bat duzu, hau da, elementu guztietan tamaina duzula 82 00:04:36,090 --> 00:04:37,360 irakurri nahi. 83 00:04:37,360 --> 00:04:40,640 Hemen, funtzio sizeof du egingo erabilgarri etorriko. 84 00:04:40,640 --> 00:04:45,570 Ondoren zenbakia pasatzen duzu, eta horrek elementu-kopurua adierazten du 85 00:04:45,570 --> 00:04:47,480 tamaina irakurtzen. 86 00:04:47,480 --> 00:04:51,180 Eta gero, azkenik, inptr, hau da, fitxategi erakuslea duzu Oraindik dutela 87 00:04:51,180 --> 00:04:52,530 ra irakurri da. 88 00:04:52,530 --> 00:04:58,650 Beraz, elementu horiek guztiak ez dira barruan inptr eta ari dira datuak joan. 89 00:04:58,650 --> 00:05:01,660 >> Dezagun adibide txiki batean. 90 00:05:01,660 --> 00:05:07,590 Datu bi txakurrak sartu irakurri nahi badut, ondo, egin ahal izango dut bi modu bat. 91 00:05:07,590 --> 00:05:15,250 Bai ahal dut tamainako bi objektu irakurri nire inptr zakurrarekin, edo irakurri ahal izango dut 92 00:05:15,250 --> 00:05:19,280 batean objektu bi txakur tamaina. 93 00:05:19,280 --> 00:05:23,580 Beraz, ikusten duzu horrela arabera tamaina eta kopurua antolatu duzula, zuk 94 00:05:23,580 --> 00:05:25,840 dezakeen byte kopuru berean irakurri. 95 00:05:25,840 --> 00:05:28,720 96 00:05:28,720 --> 00:05:33,020 >> Beraz, gaur egun, dezagun aldatu pixelaren kolorea behar dugu. 97 00:05:33,020 --> 00:05:37,320 Berriro begiratuz gero bmp.h, gero ikusiko duzu, behealdean 98 00:05:37,320 --> 00:05:42,920 RGBTRIPLEs struct bat dira, non dute hiru byte osatzen dituzte. 99 00:05:42,920 --> 00:05:49,220 Bata, rgbtBlue, rgbtGreen, eta rgbtRed. 100 00:05:49,220 --> 00:05:52,480 Beraz, horietako bakoitzaren zenbatekoa adierazten urdina, berdea zenbatekoa, eta 101 00:05:52,480 --> 00:05:57,250 gorria zenbatekoa pixel honen barruan, non Zenbateko bakoitza bat irudikatzen 102 00:05:57,250 --> 00:05:58,670 zenbaki hamaseitarra. 103 00:05:58,670 --> 00:06:04,370 >> Beraz ff0000 kolore urdin bat izango da, doa urdina delako, 104 00:06:04,370 --> 00:06:05,850 berdea, gorria hemen. 105 00:06:05,850 --> 00:06:09,300 Eta orduan f-ren guztiak zuriak izango dira. 106 00:06:09,300 --> 00:06:13,440 Dezagun smiley.bmp begirada bat, eta horrek Zure banaketa kode duzu. 107 00:06:13,440 --> 00:06:15,690 Irekitzeko baduzu besterik irudi batean ikuslea, dituzu ondoren 108 00:06:15,690 --> 00:06:17,080 besterik smiley gorri bat ikusten. 109 00:06:17,080 --> 00:06:20,380 Baina murgiltze sakonago bat hartuz, hemen dugu ikusten duten egitura 110 00:06:20,380 --> 00:06:22,340 of besterik pixel da. 111 00:06:22,340 --> 00:06:25,880 Pixel zuria dugu, eta ondoren pixel gorri. 112 00:06:25,880 --> 00:06:31,000 Zuria, ffffff, eta, ondoren, guztiak pixel gorri dut koloretako zuretzat 113 00:06:31,000 --> 00:06:35,440 hemen, eta 0000ff Oraindik dutela ikusten duzu. 114 00:06:35,440 --> 00:06:39,760 Zero urdina, zero berde eta gorriz beteta. 115 00:06:39,760 --> 00:06:45,350 Eta smiley da zortzi pixel zabal geroztik, ez dugu inolako betegarria izan. 116 00:06:45,350 --> 00:06:47,360 Ondo da. 117 00:06:47,360 --> 00:06:53,310 >> Balio ezberdinak esleitu ziren I hala bada RGBTRIPLE bat eta nahi dut 118 00:06:53,310 --> 00:06:58,350 bertan berdea egiteko, eta gero zer egingo dudan da RGBTRIPLE bat izendatu deklaratzeko nuke 119 00:06:58,350 --> 00:07:02,660 hirukoitza, eta, ondoren, behin sartzeko byte egiturari dut barruan 120 00:07:02,660 --> 00:07:04,030 dot operadorea erabiliko luke. 121 00:07:04,030 --> 00:07:08,430 Beraz triple.rgbtBlue, I can esleitu dela 0. 122 00:07:08,430 --> 00:07:13,460 Berdea da I esleitu ahal osoa - edozein zenbakia, benetan, 0 eta ff artean. 123 00:07:13,460 --> 00:07:15,470 Eta ondoren gorria, Dut, halaber, 0 esan nahi du. 124 00:07:15,470 --> 00:07:19,160 Orduan hori pixel berde bat ematen dit. 125 00:07:19,160 --> 00:07:23,030 >> Hurrengoa, zer bada begiratu nahi dut zerbait balioa? 126 00:07:23,030 --> 00:07:27,250 Dela egiaztatzen zerbait izan nezakeen ala hirukoitza en rgbtBlue balioa da 127 00:07:27,250 --> 00:07:31,080 ff eta ondoren, inprimatu, "naiz sentitzen urdin! ", gertakari baten ondorioz. 128 00:07:31,080 --> 00:07:35,640 Orain, horrek ez du nahitaez esan nahi pixel urdina dela, ezta? 129 00:07:35,640 --> 00:07:40,060 Pixel en valores berdea eta gorria delako izan ere izan ez 0 balioak. 130 00:07:40,060 --> 00:07:43,470 Honen horrek esan nahi du, eta hori guztia hau da egiaztapena 131 00:07:43,470 --> 00:07:45,610 urdin osoa. 132 00:07:45,610 --> 00:07:50,050 Baina pixel guztiak izan ere partziala izan kolore balioak, hau bezalako 133 00:07:50,050 --> 00:07:52,180 hurrengo adibide hemen. 134 00:07:52,180 --> 00:07:55,400 >> Pixka bat gogorragoa ikusi irudi hau zer da gaur egun. 135 00:07:55,400 --> 00:08:00,320 Honek itxura bezala pixka bat gehiago clue.bmp duzula eman behar dugu. 136 00:08:00,320 --> 00:08:03,600 Orain, fisikoki, hau konpondu dezakezu, han gorria, egilea asko delako 137 00:08:03,600 --> 00:08:07,040 pantaila gorri bat eusten irudiari so Gainerako koloreak ager daitezke. 138 00:08:07,040 --> 00:08:10,968 Beraz, nola ez hau imitatzen dugu c batekin? 139 00:08:10,968 --> 00:08:15,640 Beno, gorri guztiak kenduko genuke irudia osorik. 140 00:08:15,640 --> 00:08:21,870 Eta, beraz, behin ezarri genuke egin pixel en 0 balioa gorria. 141 00:08:21,870 --> 00:08:25,020 Eta, beraz, irudia apur bat begiratu litzateke hau, non gorria ez dugu atsegin apur 142 00:08:25,020 --> 00:08:26,300 inolako. 143 00:08:26,300 --> 00:08:29,390 >> Mezuaren ezkutuko bat ikusi ahal izango dugu Pixka argiago orain. 144 00:08:29,390 --> 00:08:31,730 Beste smiley face da. 145 00:08:31,730 --> 00:08:33,870 Edo agian beste metodo bat erabili izan dugu. 146 00:08:33,870 --> 00:08:36,480 Agian, identifikatu ahal izan genuen the pixel gorri guztiak - 147 00:08:36,480 --> 00:08:41,100 hau da, pixel guztiekin 0 urdina, berdea, 0 eta 0 gorri - 148 00:08:41,100 --> 00:08:43,169 eta aldatu zuri horiek. 149 00:08:43,169 --> 00:08:45,470 Eta gure irudiari begiratu dezake honen antzeko zerbait. 150 00:08:45,470 --> 00:08:48,250 Pixka bat errazagoa da ikusten. 151 00:08:48,250 --> 00:08:51,170 >> Badira desestaltzen beste modu asko sekretua mezua baita, 152 00:08:51,170 --> 00:08:53,730 kolorea manipulatzeko aurre. 153 00:08:53,730 --> 00:08:57,050 Agian metodo bat erabil dezakezu aipatutako dut. 154 00:08:57,050 --> 00:08:59,600 Eta, gainera, baliteke nahi duzun kolore batzuk hobetzeko 155 00:08:59,600 --> 00:09:02,620 eta ekarri dutenak daudelarik. 156 00:09:02,620 --> 00:09:06,190 >> Beraz, orain, pixel aldatu dugu kolorea, hurrengoa besterik ez dugu behar horiek idazteko 157 00:09:06,190 --> 00:09:08,500 scanline arte egiten duen ibilbidean, pixel pixel. 158 00:09:08,500 --> 00:09:11,860 Eta, hala ere, berriro ere, atzera begiratu nahi duzu , copy.c izateko ez duzu kopiatzen bada 159 00:09:11,860 --> 00:09:18,170 dagoeneko, eta fwrite begiratu funtzioa, eta horrek datuak hartzen, erakuslea 160 00:09:18,170 --> 00:09:23,230 byte daukan egiturari joan batetik, tamaina duzula irakurtzen ari 161 00:09:23,230 --> 00:09:26,610 elementuak, elementu kopurua, eta ondoren outptr du - 162 00:09:26,610 --> 00:09:29,450 fitxategi horiek helmuga. 163 00:09:29,450 --> 00:09:34,010 >> Pixel idatzi ondoren duzun, duzu ere bete batean idazten dute. 164 00:09:34,010 --> 00:09:34,970 Zer da betegarria? 165 00:09:34,970 --> 00:09:38,670 Beno, rgbt pixel bakoitzean da hiru byte luzea. 166 00:09:38,670 --> 00:09:43,670 Baina, bitmap irudi bat scanline du lau byte multiplo bat izan behar du. 167 00:09:43,670 --> 00:09:47,650 Eta pixel-kopurua ez bada bat lau multiplo, ondoren, gehitu behar dugu 168 00:09:47,650 --> 00:09:48,880 betegarria hau. 169 00:09:48,880 --> 00:09:51,420 Betegarria da besterik 0 s irudikatzen. 170 00:09:51,420 --> 00:09:54,380 Beraz, nola ez, idatzi edo irakurri dugu hau? 171 00:09:54,380 --> 00:09:59,280 Beno, bihurtzen da ezin dela benetan fread betegarria, baina ahal duzun 172 00:09:59,280 --> 00:10:00,970 kalkulatu da. 173 00:10:00,970 --> 00:10:04,400 >> Kasu honetan, ideiarik eta epaia zabalera bera dute, beraz, 174 00:10:04,400 --> 00:10:05,910 betegarria bera da. 175 00:10:05,910 --> 00:10:09,370 Eta betegarria, ikusiko duzun bezala copy.c batean, kalkulatzen da 176 00:10:09,370 --> 00:10:11,790 beheko formula batekin - 177 00:10:11,790 --> 00:10:16,690 bi.biWidth aldiz sizeof (RGBTRIPLE) izango zenbat byte bmp ematen diguten 178 00:10:16,690 --> 00:10:18,280 ilara guztietan dauka. 179 00:10:18,280 --> 00:10:21,890 Hortik aurrera, MODULOS eta kenketa rekin 4 kalkulatu ahal nola 180 00:10:21,890 --> 00:10:25,610 byte asko gehitu behar da, beraz on byte multiplo du 181 00:10:25,610 --> 00:10:27,250 ilara bakoitzean lau da. 182 00:10:27,250 --> 00:10:30,490 >> Orain formula dugula zenbat betegarria behar dugu, gaur egun, 183 00:10:30,490 --> 00:10:31,610 idatzi ahal izango dugu. 184 00:10:31,610 --> 00:10:34,080 Orain, lehen aipatu dut, betegarria 0 s besterik ez da. 185 00:10:34,080 --> 00:10:39,730 Beraz, kasu horretan, zu besterik jarriz dugu char bat, kasu honetan, 0 bat, sartu gure 186 00:10:39,730 --> 00:10:41,710 outptr - gure outfile. 187 00:10:41,710 --> 00:10:47,530 Beraz, ezin dela besterik izan fputc 0, koma outptr. 188 00:10:47,530 --> 00:10:52,400 >> Beraz, dugu irakurtzen dut berriz sartu gure fitxategia, fitxategi / I mantendu du pista gure 189 00:10:52,400 --> 00:10:57,440 zerbait fitxategi horiek posizioa fitxategia posizio adierazle deritzo. 190 00:10:57,440 --> 00:10:59,350 Pentsa kurtsore baten ondorioz. 191 00:10:59,350 --> 00:11:03,550 Funtsean, denbora guztietan aurreratzen da fread dugula, baina ditugun 192 00:11:03,550 --> 00:11:05,671 Gainean kontrolatu, gehiegi. 193 00:11:05,671 --> 00:11:11,030 >> Fitxategia posizio adierazlearen mugitzeko, funtzioa fseek erabil dezakezu. 194 00:11:11,030 --> 00:11:15,600 Non inptr fitxategia adierazten horretan bilatzen ari zaren erakuslea da, 195 00:11:15,600 --> 00:11:20,370 Zenbateko byte kopurua da duzula kurtsorea eramateko, eta, ondoren, nahi 196 00:11:20,370 --> 00:11:23,470 erreferente erlazionatzen kurtsorea non dagoen from. 197 00:11:23,470 --> 00:11:26,770 SEEK_CUR pasatzen duzu bada, hori egungo adierazten 198 00:11:26,770 --> 00:11:28,100 fitxategiko posizio. 199 00:11:28,100 --> 00:11:31,020 Edo beste parametro batzuk erabili ahal izango dituzu. 200 00:11:31,020 --> 00:11:35,400 Beraz, agian fseek erabiltzeko joateko nahi dugu fitxategi horren betegarria gainean. 201 00:11:35,400 --> 00:11:39,410 Eta berriro ere, itsatsita badago, ez da copy.c. in horren adierazgarri 202 00:11:39,410 --> 00:11:43,260 >> Orain, beraz fitxategia ireki dugu, ideiarik, eta epaia. 203 00:11:43,260 --> 00:11:46,450 Goiburua informazio eguneratu dugu Gure epaia, zeren behin 204 00:11:46,450 --> 00:11:48,730 bitmap goiburu bat behar du. 205 00:11:48,730 --> 00:11:52,280 Dugu orduan arrastoren en sartu irakurri scanline, pixel pixel, aldatuz 206 00:11:52,280 --> 00:11:55,210 kolore guztietan bezala, beharrezkoa da, eta sartu horiek idatziz 207 00:11:55,210 --> 00:11:57,340 epaia, pixel pixel. 208 00:11:57,340 --> 00:12:01,550 Behin epaia irekitzean, ikusi ahal izango duzu nork erruduna, edo zer sekretua 209 00:12:01,550 --> 00:12:02,850 mezua da. 210 00:12:02,850 --> 00:12:05,550 Nire izena Zamyla da, eta hau whodunit zen. 211 00:12:05,550 --> 00:12:12,864