1 00:00:00,000 --> 00:00:09,500 >> [MUSIC PLAYING] 2 00:00:09,500 --> 00:00:12,350 >> ZAMYLA Chan: Bu Miss Scarlett idi şamdan ilə. 3 00:00:12,350 --> 00:00:13,560 Whodunit? 4 00:00:13,560 --> 00:00:15,030 Yaxşı, biz tapmaq olacaq. 5 00:00:15,030 --> 00:00:20,870 Board oyun Açar, siz bilər fiziki qırmızı image veriləcək. 6 00:00:20,870 --> 00:00:24,120 Və image çox qırmızı və xallı, və sizin iş üçün 7 00:00:24,120 --> 00:00:25,490 gizli mesaj aşkar. 8 00:00:25,490 --> 00:00:29,740 Və adətən bir qırmızı ilə təmin edirik büyüteç, və ya bir qırmızı ekran 9 00:00:29,740 --> 00:00:31,410 ki, gizli mesaj aşkar. 10 00:00:31,410 --> 00:00:33,340 Yaxşı, ki, taklit olacaq. 11 00:00:33,340 --> 00:00:37,960 >> Whodunit, bir bitmap image sunulur ki, çox xallı və qırmızı görünür 12 00:00:37,960 --> 00:00:43,430 və sonra whodunit proqram run bir gizli mesaj aşkar. 13 00:00:43,430 --> 00:00:45,650 >> Belə ki, addımlar bu pozub bildirin. 14 00:00:45,650 --> 00:00:50,390 Birincisi, siz faylı açmaq istəyirsinizsə - Sizə verilən etdik ki, ipucu. 15 00:00:50,390 --> 00:00:53,880 Və sonra da yaratmaq hökmü bitmap fayl. 16 00:00:53,880 --> 00:00:58,240 Sonra bitmap yeniləmək istəyirsinizsə hökmü outfile üçün info header. 17 00:00:58,240 --> 00:00:59,920 Ki, sonra daha çox. 18 00:00:59,920 --> 00:01:04,319 Və sonra oxumaq olacaq ipucu, scanline, pixel tərəfindən pixel, 19 00:01:04,319 --> 00:01:07,320 kimi pixel rəng dəyişən zəruri və yazı 20 00:01:07,320 --> 00:01:08,960 hökmü o - 21 00:01:08,960 --> 00:01:12,000 daxil pixel tərəfindən pixel hökmü scanline. 22 00:01:12,000 --> 00:01:13,780 >> Biz bu barədə gedən başlar? 23 00:01:13,780 --> 00:01:16,940 Yaxşı, xoşbəxtlikdən, biz copy.c var bölüşdürülməsi kodu. 24 00:01:16,940 --> 00:01:21,240 Bu sübut edir bizə olduqca faydalı. 25 00:01:21,240 --> 00:01:29,700 Copy.c, bir fayl açılır ki, deyilir sonra INFILE nin header, və yenilikləri 26 00:01:29,700 --> 00:01:31,070 OUTFILE nin header. 27 00:01:31,070 --> 00:01:37,010 Və sonra bu hər pixel oxuyur sonra scanline, pixel tərəfindən pixel, və 28 00:01:37,010 --> 00:01:42,390 Bu outfile daxil pixel yazır. 29 00:01:42,390 --> 00:01:45,020 >> Belə ki, ilk addım ola bilər Aşağıdakı çalıştırmak olacaq 30 00:01:45,020 --> 00:01:46,420 Terminalda komanda - 31 00:01:46,420 --> 00:01:50,270 cp copy.c whodunit.c. 32 00:01:50,270 --> 00:01:55,320 Bu surətini yaradacaq copy.c whodunit.c adına. 33 00:01:55,320 --> 00:01:58,320 Belə ki, açmaq üçün ilk addım fayl, yaxşı, dəqiq var 34 00:01:58,320 --> 00:02:00,070 copy.c. ki replica 35 00:02:00,070 --> 00:02:03,360 Mən ki, baxmaq üçün tərk edəcəyik. 36 00:02:03,360 --> 00:02:07,860 >> Biz bu PSET ilə edilir məşğul olduğunuz fayl I / O, əsasən faylları alaraq, 37 00:02:07,860 --> 00:02:10,229 , oxu, yazı, onları redaktə. 38 00:02:10,229 --> 00:02:12,650 Siz ilk bir fayl açmaq edirsiniz? 39 00:02:12,650 --> 00:02:16,800 Yaxşı, siz bir fayl bəyan olacaq pointer, və sonra zəng 40 00:02:16,800 --> 00:02:18,670 funksiyası fopen. 41 00:02:18,670 --> 00:02:23,150 Yolu, və ya adı Pass fayl və sonra istədiyiniz rejimi 42 00:02:23,150 --> 00:02:24,700 daxil faylı açmaq üçün 43 00:02:24,700 --> 00:02:28,620 Bir r keçən açılacaq oxumaq üçün foo.bmp. 44 00:02:28,620 --> 00:02:35,670 Halbuki w keçən ilə fopen olacaq açıq bar.bmp, fayl yazmaq üçün və 45 00:02:35,670 --> 00:02:37,020 həqiqətən redaktə. 46 00:02:37,020 --> 00:02:41,970 >> Belə ki, indi biz fayl açdı etdik ki, bizim Növbəti addım header info yeniləmək üçün 47 00:02:41,970 --> 00:02:43,230 Bu outfile üçün. 48 00:02:43,230 --> 00:02:44,610 Bir header info nədir? 49 00:02:44,610 --> 00:02:48,160 Bəli, ilk bilmək lazımdır nə bitmap edir. 50 00:02:48,160 --> 00:02:51,000 A bitmap yalnız bir sadə bytes təşkili. 51 00:02:51,000 --> 00:02:55,480 Onlar bu faylı elan edirik bir dəstə ilə burada bmp.h, 52 00:02:55,480 --> 00:02:58,610 nə bitmap məlumat həqiqətən həyata edilir. 53 00:02:58,610 --> 00:03:05,730 Amma nə biz, həqiqətən, qayğı deyil bitmap fayl header, burada, və 54 00:03:05,730 --> 00:03:08,460 burada artıq bitmap info header. 55 00:03:08,460 --> 00:03:13,170 The header bir neçə ibarətdir çox faydalı sübut edəcək ki, dəyişənlərin. 56 00:03:13,170 --> 00:03:18,400 Bu olan biSizeImage var bayt image ümumi ölçüsü. 57 00:03:18,400 --> 00:03:20,890 Bu piksel və padding daxildir. 58 00:03:20,890 --> 00:03:24,210 Padding çox vacibdir, lakin biz daha sonra almaq lazımdır. 59 00:03:24,210 --> 00:03:30,000 >> BiWidth nın eni təmsil piksel mənfi padding image. 60 00:03:30,000 --> 00:03:34,220 BiHeight da sonra hündürlüyü piksel təsvirin. 61 00:03:34,220 --> 00:03:38,240 Və sonra BITMAPFILEHEADER və Mən qeyd etdiyim kimi BITMAPINFOHEADER, 62 00:03:38,240 --> 00:03:40,900 əvvəllər, o təmsil olunur Structs kimi. 63 00:03:40,900 --> 00:03:45,410 Belə ki, fayl mövzu gedə bilməz özü, lakin siz almaq lazımdır 64 00:03:45,410 --> 00:03:47,370 içərisində bu dəyişənlərin. 65 00:03:47,370 --> 00:03:48,170 >> OK. 66 00:03:48,170 --> 00:03:50,600 Belə ki, necə biz header info yeniləyə bilərəm? 67 00:03:50,600 --> 00:03:54,020 Bəli, ilk biz görmək lazımdır biz olub hər hansı bir məlumat dəyişdirmək lazımdır 68 00:03:54,020 --> 00:03:58,480 Bu üçün INFILE, ipucu, outfile, hökmü. 69 00:03:58,480 --> 00:04:00,250 Bir şey bu halda dəyişir? 70 00:04:00,250 --> 00:04:04,320 Yaxşı, həqiqətən, biz gedirik, çünki yalnız rəngləri dəyişdirilməsi üçün. 71 00:04:04,320 --> 00:04:07,550 Biz faylı dəyişən etmək fikrində deyilik ölçüsü, resim ölçüsü, eni, 72 00:04:07,550 --> 00:04:08,310 və ya hündürlüyü. 73 00:04:08,310 --> 00:04:14,010 Belə ki, indi üçün bütün doğru danışırsınızsa yalnız hər pixel çıxarmaq. 74 00:04:14,010 --> 00:04:14,840 >> OK. 75 00:04:14,840 --> 00:04:20,720 Belə ki, indi, necə biz həqiqətən baxaq fayl hər pixel oxuya bilərsiniz. 76 00:04:20,720 --> 00:04:23,640 Başqa bir fayl I / O funksiyası oyun minir - 77 00:04:23,640 --> 00:04:24,700 fread. 78 00:04:24,700 --> 00:04:28,440 Bu struct bir pointer edir bytes ehtiva edir ki, 79 00:04:28,440 --> 00:04:30,110 Siz oxuyursunuz. 80 00:04:30,110 --> 00:04:31,890 Belə ki, daxil oxuyursunuz. 81 00:04:31,890 --> 00:04:36,090 Və sonra olan bir ölçüsü keçmək hər element ölçüsü ki, 82 00:04:36,090 --> 00:04:37,360 oxumaq istəyirəm. 83 00:04:37,360 --> 00:04:40,640 Burada funksiyası sizeof lazımlı olacaq. 84 00:04:40,640 --> 00:04:45,570 Sonra, sayı keçmək elementlərinin sayı təmsil 85 00:04:45,570 --> 00:04:47,480 oxumaq ölçüsü. 86 00:04:47,480 --> 00:04:51,180 Və sonra nəhayət, inptr, olan siz ki, fayl pointer 87 00:04:51,180 --> 00:04:52,530 oxumaq gedir. 88 00:04:52,530 --> 00:04:58,650 Belə ki, həmin elementlərin bütün daxilində var inptr və onlar data olacaq. 89 00:04:58,650 --> 00:05:01,660 >> Bir az Məsələn baxaq. 90 00:05:01,660 --> 00:05:07,590 I data iki itlər daxil oxumaq istəyirsinizsə, yaxşı, mən bu iki yoldan birini edə bilərsiniz. 91 00:05:07,590 --> 00:05:15,250 Mən ya ölçüsü iki obyektlərində oxuya bilərsiniz Mənim inptr dən it, və ya oxuya bilərsiniz 92 00:05:15,250 --> 00:05:19,280 bir iki itlər ölçüsü etiraz. 93 00:05:19,280 --> 00:05:23,580 Siz görəcəksiniz ki, yol asılı olaraq , siz ölçüsü və nömrə təşkil ki, 94 00:05:23,580 --> 00:05:25,840 bytes eyni sayda oxuya bilərsiniz. 95 00:05:25,840 --> 00:05:28,720 96 00:05:28,720 --> 00:05:33,020 >> Belə ki, indi dəyişmək bildirin Biz lazımdır kimi pixel color. 97 00:05:33,020 --> 00:05:37,320 Yenidən bmp.h baxmaq, onda siz altındakı ki, görürsünüz 98 00:05:37,320 --> 00:05:42,920 RGBTRIPLEs başqa struct olduğu onlar üç bayt təşkil edir. 99 00:05:42,920 --> 00:05:49,220 One, rgbtBlue, rgbtGreen, və rgbtRed. 100 00:05:49,220 --> 00:05:52,480 Belə ki, bu hər məbləğini mavi, yaşıl məbləği, və 101 00:05:52,480 --> 00:05:57,250 Bu pixel daxilində qırmızı məbləği burada hər məbləğ ilə təmsil olunur 102 00:05:57,250 --> 00:05:58,670 hexadecimal sayı. 103 00:05:58,670 --> 00:06:04,370 >> Belə ki, ff0000 mavi rəng olacaq, mavi gedir, çünki 104 00:06:04,370 --> 00:06:05,850 qırmızı, yaşıl. 105 00:06:05,850 --> 00:06:09,300 Və sonra bütün f ağ olacaq. 106 00:06:09,300 --> 00:06:13,440 Nin smiley.bmp nəzər almaq imkan olan Siz distribution kodu var. 107 00:06:13,440 --> 00:06:15,690 Yalnız bir resim açmaq əgər Viewer, sonra will 108 00:06:15,690 --> 00:06:17,080 yalnız bir qırmızı smiley görürük. 109 00:06:17,080 --> 00:06:20,380 Amma biz will, bir dərin dive alaraq görürük ki, strukturu 110 00:06:20,380 --> 00:06:22,340 bu yalnız piksel. 111 00:06:22,340 --> 00:06:25,880 Biz ağ piksel, və sonra qırmızı piksel. 112 00:06:25,880 --> 00:06:31,000 Bu bütün sonra, ağ ffffff, və Mən sizin üçün rəngli etdik qırmızı piksel 113 00:06:31,000 --> 00:06:35,440 burada, və onlar 0000ff olduğunu görürük. 114 00:06:35,440 --> 00:06:39,760 Zero mavi, sıfır yaşıl, və tam red. 115 00:06:39,760 --> 00:06:45,350 Və smiley səkkiz piksel geniş olduğundan, Biz hər hansı bir padding yoxdur. 116 00:06:45,350 --> 00:06:47,360 Bütün hüquqlar. 117 00:06:47,360 --> 00:06:53,310 >> Mən müxtəlif dəyərlər təyin etmək idi əgər bir RGBTRIPLE və mən istədim 118 00:06:53,310 --> 00:06:58,350 yaşıl, sonra mən nə edirəm Mən adlı RGBTRIPLE bəyan 119 00:06:58,350 --> 00:07:02,660 üç, və sonra hər daxil olmaq üçün ki, struct I daxilində byte 120 00:07:02,660 --> 00:07:04,030 dot operator istifadə edir. 121 00:07:04,030 --> 00:07:08,430 Belə ki triple.rgbtBlue, mən 0 ki, təyin. 122 00:07:08,430 --> 00:07:13,460 Green Mən tam təyin edə bilərsiniz - hər hansı bir sayı, həqiqətən, 0 və ff arasında. 123 00:07:13,460 --> 00:07:15,470 Və sonra qırmızı, mən də 0 demək gedirəm. 124 00:07:15,470 --> 00:07:19,160 Belə ki, o mənə bir yaşıl pixel verir. 125 00:07:19,160 --> 00:07:23,030 >> Sonra, mən yoxlamaq üçün nə istəyirsinizsə bir şey dəyəri? 126 00:07:23,030 --> 00:07:27,250 Mən yoxlayır ki, bir şey ola bilər Triple-nin rgbtBlue dəyəri olub 127 00:07:27,250 --> 00:07:31,080 ff və sonra çap, "Mən hiss edirəm blue! "nəticəsində. 128 00:07:31,080 --> 00:07:35,640 İndi ki, mütləq demək deyil pixel sağ, mavi olduğunu? 129 00:07:35,640 --> 00:07:40,060 Pixel yaşıl və qırmızı dəyərlər Çünki də qeyri-0 dəyərlər ola bilər. 130 00:07:40,060 --> 00:07:43,470 Bu o deməkdir ki, bütün və bütün bu yoxlanılması olunur 131 00:07:43,470 --> 00:07:45,610 tam mavi rəng üçün. 132 00:07:45,610 --> 00:07:50,050 Lakin bütün piksel da qismən ola bilər bu kimi rəng dəyərlər, 133 00:07:50,050 --> 00:07:52,180 burada növbəti nümunəsidir. 134 00:07:52,180 --> 00:07:55,400 >> Bu bir az daha görmək üçün Bu image indi nə. 135 00:07:55,400 --> 00:08:00,320 Bu bir az daha çox kimi görünür siz veriləcək lazımdır ki clue.bmp. 136 00:08:00,320 --> 00:08:03,600 İndi, fiziki, siz bu həll edə bilər, ilə, qırmızı bir çox var, çünki 137 00:08:03,600 --> 00:08:07,040 image qırmızı ekran keçirilməsi belə digər rəng görünür edə bilər ki,. 138 00:08:07,040 --> 00:08:10,968 Belə ki, necə biz c bu təqlid edirsiniz? 139 00:08:10,968 --> 00:08:15,640 Bəli, biz bütün qırmızı aradan qaldırılması bilər image tamamilə. 140 00:08:15,640 --> 00:08:21,870 Və belə ki, biz hər set istədiyiniz etmək 0 Pixel qırmızı dəyəri. 141 00:08:21,870 --> 00:08:25,020 Və belə image bir az baxmaq biz heç bir qırmızı olduğu bu kimi bit 142 00:08:25,020 --> 00:08:26,300 heç. 143 00:08:26,300 --> 00:08:29,390 >> Biz gizli mesaj bilərsiniz az daha aydın indi. 144 00:08:29,390 --> 00:08:31,730 Bu başqa bir smiley face var. 145 00:08:31,730 --> 00:08:33,870 Və ya bəlkə biz başqa bir metodu istifadə edə bilər. 146 00:08:33,870 --> 00:08:36,480 Bəlkə, biz müəyyən edə bilər qırmızı piksel bütün - 147 00:08:36,480 --> 00:08:41,100 ki, piksel bütün ilə 0 mavi, 0, yaşıl və qırmızı 0 - 148 00:08:41,100 --> 00:08:43,169 və ağ o dəyişir. 149 00:08:43,169 --> 00:08:45,470 Və bizim image ola bilər bu kimi bir şey. 150 00:08:45,470 --> 00:08:48,250 Görmək üçün bir az daha asan. 151 00:08:48,250 --> 00:08:51,170 >> Açmaq üçün başqa yollar çox var gizli mesaj, eləcə də 152 00:08:51,170 --> 00:08:53,730 rəng manipulyasiya ilə məşğul. 153 00:08:53,730 --> 00:08:57,050 Bəlkə üsullardan birini istifadə edə bilər Mən yuxarıda qeyd. 154 00:08:57,050 --> 00:08:59,600 Və əlavə, istədiyiniz bilər bir rəng artırmaq üçün 155 00:08:59,600 --> 00:09:02,620 və o həyata gətirir. 156 00:09:02,620 --> 00:09:06,190 >> Belə ki, indi biz pixel değiştirdik ki, rəng, növbəti biz yalnız onları yazmaq lazımdır 157 00:09:06,190 --> 00:09:08,500 pixel tərəfindən scanline üçün, pixel. 158 00:09:08,500 --> 00:09:11,860 Və yenə, geri baxmaq lazımdır Siz sitemizi əgər, copy.c üçün 159 00:09:11,860 --> 00:09:18,170 artıq və fwrite baxmaq məlumat alan funksiyası, bir pointer 160 00:09:18,170 --> 00:09:23,230 bytes ehtiva struct Siz ölçüsü, oxu etdiyiniz 161 00:09:23,230 --> 00:09:26,610 maddələr, maddələr sayı, və sonra outptr - 162 00:09:26,610 --> 00:09:29,450 bu faylların təyinat. 163 00:09:29,450 --> 00:09:34,010 >> Siz piksel yazmaq sonra, will də padding yazmaq lazımdır. 164 00:09:34,010 --> 00:09:34,970 Padding nədir? 165 00:09:34,970 --> 00:09:38,670 Yaxşı, hər rgbt pixel üç bytes uzun. 166 00:09:38,670 --> 00:09:43,670 Lakin, bir bitmap image scanline dörd bayt bir çox olmalıdır. 167 00:09:43,670 --> 00:09:47,650 Və piksel sayı deyil, əgər bir dörd çox, sonra biz əlavə etmək lazımdır 168 00:09:47,650 --> 00:09:48,880 Bu padding. 169 00:09:48,880 --> 00:09:51,420 Dolgu yalnız 0s təmsil edir. 170 00:09:51,420 --> 00:09:54,380 Belə ki, necə biz yazmaq, və ya bu oxuyursunuz? 171 00:09:54,380 --> 00:09:59,280 Bəli, bu çıxır siz bilməzsiniz ki, həqiqətən fread padding, lakin siz 172 00:09:59,280 --> 00:10:00,970 hesablamaq. 173 00:10:00,970 --> 00:10:04,400 >> Bu halda, ipucu və hökmü eyni eni var, belə ki, 174 00:10:04,400 --> 00:10:05,910 padding eyni. 175 00:10:05,910 --> 00:10:09,370 Və padding, siz görəcəksiniz kimi copy.c ildə hesablanır 176 00:10:09,370 --> 00:10:11,790 aşağıdakı formula ilə - 177 00:10:11,790 --> 00:10:16,690 bi.biWidth dəfə sizeof (RGBTRIPLE) olacaq neçə bayt bmp bizə 178 00:10:16,690 --> 00:10:18,280 hər bir sıra var. 179 00:10:18,280 --> 00:10:21,890 Oradan modulos və subtractions 4 hesablamaq bilərsiniz necə 180 00:10:21,890 --> 00:10:25,610 çox bytes əlavə edilməlidir ki, üzrə bytes çox 181 00:10:25,610 --> 00:10:27,250 hər satır dörd edir. 182 00:10:27,250 --> 00:10:30,490 >> İndi biz üçün formula var ki, biz lazımdır nə qədər padding, indi 183 00:10:30,490 --> 00:10:31,610 biz onu yaza bilərsiniz. 184 00:10:31,610 --> 00:10:34,080 İndi mən əvvəl qeyd, padding yalnız 0s edir. 185 00:10:34,080 --> 00:10:39,730 Belə ki, bu halda, biz yalnız qoyulması edirik bu halda 0 char, bizim 186 00:10:39,730 --> 00:10:41,710 outptr - bizim outfile. 187 00:10:41,710 --> 00:10:47,530 Belə ki, yalnız fputc ola bilər 0, vergül outptr. 188 00:10:47,530 --> 00:10:52,400 >> Belə ki, biz daxil oxu etdik isə bizim fayl, fayl I / O takip saxlanılır bizim 189 00:10:52,400 --> 00:10:57,440 bir şey ilə bu faylları mövqeyi fayl mövqe göstərici adlanır. 190 00:10:57,440 --> 00:10:59,350 Bir kursor kimi düşünün. 191 00:10:59,350 --> 00:11:03,550 Əsasən, bu hər dəfə avanslar biz fread, amma biz ki, 192 00:11:03,550 --> 00:11:05,671 də, bu nəzarət. 193 00:11:05,671 --> 00:11:11,030 >> Fayl mövqe göstərici hərəkət etmək, Siz funksiyası fseek istifadə edə bilərsiniz. 194 00:11:11,030 --> 00:11:15,600 Bu inptr fayl təmsil yerləşir Siz axtarır etdiyiniz göstərici, 195 00:11:15,600 --> 00:11:20,370 məbləği bytes sayı, siz sonra kursor hərəkət və istədiyiniz 196 00:11:20,370 --> 00:11:23,470 istinad nöqtəsi aiddir Sizin kursor edir harada. 197 00:11:23,470 --> 00:11:26,770 Siz SEEK_CUR keçmək Əgər ki, cari təmsil 198 00:11:26,770 --> 00:11:28,100 fayl mövqe. 199 00:11:28,100 --> 00:11:31,020 Yoxsa bəzi digər parametrləri istifadə edə bilərsiniz. 200 00:11:31,020 --> 00:11:35,400 Belə ki, biz keçmək fseek istifadə edə bilərsiniz Bu fayl padding üzərində. 201 00:11:35,400 --> 00:11:39,410 Zorlandığınız əgər yenə, var copy.c. ki nümunəsi 202 00:11:39,410 --> 00:11:43,260 >> Belə ki, indi biz fayl açmıştınız ipucu, və hökmü. 203 00:11:43,260 --> 00:11:46,450 Biz üçün header info yeniləndi etdik Bizim hökmü, çünki hər 204 00:11:46,450 --> 00:11:48,730 bitmap bir mövzu lazımdır. 205 00:11:48,730 --> 00:11:52,280 Biz sonra ipucu nin daxil oxumaq etdik scanline, pixel tərəfindən pixel, dəyişən 206 00:11:52,280 --> 00:11:55,210 hər rəngi kimi zəruri və Bu o yazı 207 00:11:55,210 --> 00:11:57,340 hökmü, pixel tərəfindən pixel. 208 00:11:57,340 --> 00:12:01,550 Siz hökmü açıq bir dəfə, siz bilərsiniz olan günahkar, və ya nə gizli 209 00:12:01,550 --> 00:12:02,850 mesaj. 210 00:12:02,850 --> 00:12:05,550 My name Zamyla və bu whodunit idi. 211 00:12:05,550 --> 00:12:12,864