1 00:00:00,000 --> 00:00:02,700 [Powered by Google Translate] [Walkthrough - Masalah Set 4] 2 00:00:02,700 --> 00:00:05,000 [Zamyla Chan - Universiti Harvard] 3 00:00:05,000 --> 00:00:07,340 [Ini adalah CS50. - CS50.TV] 4 00:00:08,210 --> 00:00:11,670 Semua hak. Hello, semua orang, dan mengalu-alukan kepada 4 Walkthrough. 5 00:00:11,670 --> 00:00:14,270 >> Hari ini pset kami adalah Forensik. 6 00:00:14,270 --> 00:00:18,080 Forensik adalah pset benar-benar menyeronokkan yang melibatkan berurusan dengan fail bitmap 7 00:00:18,080 --> 00:00:21,550 untuk mencari yang melakukan jenayah. 8 00:00:21,550 --> 00:00:24,200 Kemudian kita pergi untuk mengubah saiz beberapa fail bitmap, 9 00:00:24,200 --> 00:00:27,780 maka kita juga akan berurusan dengan sebahagian benar-benar menyeronokkan dipanggil pulihkan, 10 00:00:27,780 --> 00:00:31,160 di mana kita pada dasarnya menyerahkan kad memori 11 00:00:31,160 --> 00:00:34,350 di mana seseorang telah sengaja dihapuskan semua fail mereka, 12 00:00:34,350 --> 00:00:38,860 dan kita diminta untuk mendapatkan kembali fail-fail. 13 00:00:38,860 --> 00:00:42,910 >> Tetapi pertama, sebelum kita masuk ke dalam pset itu, saya benar-benar hanya mahu mengucapkan tahniah kepada semua. 14 00:00:42,910 --> 00:00:45,230 Kami kira-kira pada titik tengah kursus ini. 15 00:00:45,230 --> 00:00:50,070 Kuiz 0 adalah di belakang kita, dan kita berada di pset4, jadi pada dasarnya, kita berada di tengah-tengah. 16 00:00:50,070 --> 00:00:55,490 Kami telah datang jauh jika anda melihat kembali kepada psets anda, pset0 dan pset1, 17 00:00:55,490 --> 00:00:57,300 maka mengucapkan tahniah kepada diri sendiri tentang itu, 18 00:00:57,300 --> 00:01:00,760 dan kita akan masuk ke dalam beberapa perkara yang benar-benar menyeronokkan. 19 00:01:00,760 --> 00:01:07,070 >> Jadi toolbox kami untuk pset ini, sekali lagi, bukannya berjalan sudo yum-y update, 20 00:01:07,070 --> 00:01:13,890 kami dapat hanya menjalankan update50 jika anda berada di 17,3 versi dan atas perkakas. 21 00:01:13,890 --> 00:01:17,380 Jadi pastikan untuk menjalankan update50 - ia adalah mudah banyak, beberapa watak-watak yang kurang - 22 00:01:17,380 --> 00:01:20,640 untuk memastikan bahawa anda berada di versi terbaru perkakas. 23 00:01:20,640 --> 00:01:25,410 Terutamanya ia adalah penting untuk update50 apabila kita mula menggunakan CS50 Semak. 24 00:01:25,410 --> 00:01:28,700 Jadi pastikan yang anda lakukan bahawa. 25 00:01:28,700 --> 00:01:30,760 >> Bagi semua bahagian untuk pset ini, 26 00:01:30,760 --> 00:01:34,350 kita akan berurusan dengan input dan output fail, memfailkan I / O. 27 00:01:34,350 --> 00:01:38,140 Kami akan akan lebih banyak program-program yang berurusan dengan tatasusunan 28 00:01:38,140 --> 00:01:40,350 menunjuk ke fail dan hal-hal seperti itu, 29 00:01:40,350 --> 00:01:43,050 jadi kami mahu memastikan bahawa kita benar-benar biasa dan selesa 30 00:01:43,050 --> 00:01:47,990 berurusan dengan bagaimana untuk input dan output ke fail. 31 00:01:47,990 --> 00:01:52,080 >> Dalam kod pengagihan untuk pset ini adalah fail yang dipanggil copy.c, 32 00:01:52,080 --> 00:01:55,280 dan itulah apa yang kita pergi untuk mencari akan menjadi benar-benar berguna kepada kita 33 00:01:55,280 --> 00:02:00,340 kerana kita akan berakhir sebenarnya menyalin fail copy.c 34 00:02:00,340 --> 00:02:05,350 dan hanya mengubah sedikit untuk dapat mencapai 2 bahagian pertama set masalah. 35 00:02:05,350 --> 00:02:09,030 >> Dan demikian maka seperti yang saya nyatakan sebelum ini, kita sedang berurusan dengan bitmap serta JPEG. 36 00:02:09,030 --> 00:02:13,170 Jadi benar-benar memahami struktur bagaimana fail-fail yang dianjurkan, 37 00:02:13,170 --> 00:02:16,170 bagaimana kita benar-benar boleh menterjemah 0 dan 1s ke structs 38 00:02:16,170 --> 00:02:19,040 dan perkara-perkara yang kita sebenarnya boleh memahami dan mentafsir dan mengedit, 39 00:02:19,040 --> 00:02:21,000 yang akan menjadi benar-benar penting, 40 00:02:21,000 --> 00:02:25,970 jadi pergi ke JPEG dan fail bitmap dan memahami struktur mereka. 41 00:02:25,970 --> 00:02:30,780 >> Pset4, seperti biasa, bermula dengan bahagian soalan. 42 00:02:30,780 --> 00:02:36,600 Mereka akan berurusan dengan fail I / O dan mendapatkan anda biasa itu. 43 00:02:36,600 --> 00:02:42,520 Kemudian bahagian 1 Kisah penyiasatan, di mana anda diberi fail bitmap 44 00:02:42,520 --> 00:02:45,630 yang kelihatan semacam titik merah di seluruh. 45 00:02:45,630 --> 00:02:52,180 Dan kemudian pada asasnya apa yang kita akan lakukan adalah mengambil fail ini dan hanya mengedit ia sedikit 46 00:02:52,180 --> 00:02:54,010 ke dalam versi yang kita boleh membaca. 47 00:02:54,010 --> 00:02:56,000 Pada asasnya, apabila kita selesai, kita akan mempunyai fail yang sama, 48 00:02:56,000 --> 00:03:02,630 kecuali kita akan dapat melihat mesej tersembunyi yang disembunyikan oleh semua orang titik merah. 49 00:03:02,630 --> 00:03:07,310 Kemudian Resize adalah program bahawa, memandangkan fail 50 00:03:07,310 --> 00:03:11,490 dan kemudian diberi nama fail bahawa ia output dan kemudian diberi nombor serta, 51 00:03:11,490 --> 00:03:16,850 sebenarnya akan mengubah saiz bitmap bahawa dengan nilai yang integer. 52 00:03:16,850 --> 00:03:19,240 Kemudian akhir sekali, kita mempunyai pset RECOVER. 53 00:03:19,240 --> 00:03:24,160 Kami diberi kad memori dan kemudian perlu untuk pulih semua gambar 54 00:03:24,160 --> 00:03:25,920 yang telah sengaja dihapuskan, 55 00:03:25,920 --> 00:03:31,420 tetapi, seperti yang kita akan belajar, sebenarnya tidak dipadam dan dikeluarkan dari fail; 56 00:03:31,420 --> 00:03:38,470 kita hanya jenis hilang di mana mereka berada dalam fail, tetapi kita akan pulih bahawa. 57 00:03:38,470 --> 00:03:44,950 >> Besar. Jadi pergi ke fail I / O khusus, ini adalah senarai keseluruhan fungsi yang anda akan menggunakan. 58 00:03:44,950 --> 00:03:49,840 Anda telah melihat sedikit asas fopen, fread, dan fwrite, 59 00:03:49,840 --> 00:03:54,350 tetapi kita akan melihat lebih jauh ke dalam fail beberapa I / O fungsi seperti fputc, 60 00:03:54,350 --> 00:03:56,930 di mana anda hanya menulis satu aksara pada satu masa, 61 00:03:56,930 --> 00:04:02,000 fseek, di mana anda jenis menggerakkan penunjuk fail kedudukan ke hadapan dan ke belakang, 62 00:04:02,000 --> 00:04:05,770 dan kemudian beberapa orang lain. Tetapi kita akan pergi ke yang sedikit kemudian semasa pset. 63 00:04:08,050 --> 00:04:13,100 >> Jadi pertama, hanya untuk mendapatkan ke dalam fail I / O sebelum kita pergi ke pset, 64 00:04:13,100 --> 00:04:19,860 untuk membuka fail, sebagai contoh, apa yang anda perlu lakukan sebenarnya menetapkan penunjuk kepada fail tersebut. 65 00:04:19,860 --> 00:04:22,710 Jadi kita mempunyai penunjuk FILE *. 66 00:04:22,710 --> 00:04:27,140 Dalam kes ini, saya memanggil ia dalam penunjuk kerana itu akan menjadi infile saya. 67 00:04:27,140 --> 00:04:33,340 Dan jadi saya akan menggunakan fungsi fopen dan maka nama fail 68 00:04:33,340 --> 00:04:36,360 dan kemudian mod di mana saya akan perlu berurusan dengan fail. 69 00:04:36,360 --> 00:04:42,080 Jadi ada "r" dalam kes ini untuk membaca, "w" untuk menulis, dan kemudian "a" untuk appending. 70 00:04:42,080 --> 00:04:44,270 Sebagai contoh, apabila anda berurusan dengan infile 71 00:04:44,270 --> 00:04:47,310 dan semua yang anda mahu lakukan adalah membaca bit dan bait yang disimpan di sana, 72 00:04:47,310 --> 00:04:50,420 maka anda mungkin akan mahu menggunakan "r" sebagai mod anda. 73 00:04:50,420 --> 00:04:54,520 Apabila anda mahu untuk benar-benar menulis, jenis membuat fail baru, 74 00:04:54,520 --> 00:04:57,220 maka apa yang kita akan lakukan ialah kita akan membuka fail baru 75 00:04:57,220 --> 00:05:02,410 dan menggunakan "w" mod untuk menulis. 76 00:05:02,410 --> 00:05:07,540 >> Jadi kemudian apabila anda sebenarnya membaca ke dalam fail, struktur adalah seperti berikut. 77 00:05:07,540 --> 00:05:14,930 Pertama anda termasuk penunjuk kepada struct yang akan mengandungi bait bahawa anda membaca. 78 00:05:14,930 --> 00:05:19,830 Jadi yang akan menjadi lokasi akhir bait bahawa anda membaca. 79 00:05:19,830 --> 00:05:23,360 Anda kemudian akan menunjukkan saiz, seperti pada dasarnya berapa banyak bait 80 00:05:23,360 --> 00:05:30,100 program anda untuk membaca dalam ke fail, saiz pada dasarnya satu elemen, 81 00:05:30,100 --> 00:05:32,620 dan kemudian anda akan menentukan berapa banyak elemen yang anda mahu membaca. 82 00:05:32,620 --> 00:05:34,980 Dan kemudian akhirnya, anda perlu tahu di mana anda sedang membaca dari, 83 00:05:34,980 --> 00:05:37,580 supaya akan menjadi penunjuk dalam anda. 84 00:05:37,580 --> 00:05:41,780 Saya warna berkod ini kerana fread juga sangat serupa dengan fwrite, 85 00:05:41,780 --> 00:05:47,050 kecuali anda ingin memastikan bahawa anda menggunakan perintah yang betul, 86 00:05:47,050 --> 00:05:51,960 pastikan bahawa anda sebenarnya bertulis kepada atau membaca dari fail yang betul. 87 00:05:54,910 --> 00:05:58,610 >> Jadi maka seperti sebelum ini, jika kita mempunyai saiz unsur serta beberapa elemen, 88 00:05:58,610 --> 00:06:00,600 maka kita boleh bermain-main di sini sedikit. 89 00:06:00,600 --> 00:06:06,810 Katakan saya mempunyai struct ANJING dan demikian maka saya mahu membaca dua anjing pada satu masa. 90 00:06:06,810 --> 00:06:12,450 Apa yang saya boleh lakukan adalah mengatakan saiz satu elemen akan menjadi saiz satu ANJING 91 00:06:12,450 --> 00:06:14,770 dan saya akan benar-benar membaca kedua-dua mereka. 92 00:06:14,770 --> 00:06:18,290 Selain itu, apa yang saya boleh lakukan adalah mengatakan saya hanya akan membaca satu elemen 93 00:06:18,290 --> 00:06:21,340 dan bahawa satu elemen akan menjadi saiz dua anjing. 94 00:06:21,340 --> 00:06:24,320 Jadi itulah analogi bagaimana anda boleh jenis bermain sekitar dengan saiz dan bilangan 95 00:06:24,320 --> 00:06:28,250 bergantung pada apa yang lebih intuitif untuk anda. 96 00:06:28,250 --> 00:06:30,810 >> Semua hak. Jadi sekarang kita sampai kepada fail penulisan. 97 00:06:30,810 --> 00:06:36,880 Apabila anda mahu menulis fail, hujah pertama adalah sebenarnya di mana anda sedang membaca dari. 98 00:06:36,880 --> 00:06:42,050 Jadi itulah pada dasarnya data yang anda akan menulis ke dalam fail, 99 00:06:42,050 --> 00:06:44,490 yang merupakan penunjuk keluar pada akhir. 100 00:06:44,490 --> 00:06:47,670 Jadi, apabila anda berurusan dengan pset, pastikan anda tidak terkeliru. 101 00:06:47,670 --> 00:06:50,480 Mungkin mempunyai sisi takrif menyebelah. 102 00:06:50,480 --> 00:06:58,090 Anda boleh tarik definisi di manual dengan menaip lelaki dan kemudian fwrite, misalnya, 103 00:06:58,090 --> 00:06:59,950 di terminal, atau anda boleh merujuk kembali ke slaid ini 104 00:06:59,950 --> 00:07:03,570 dan pastikan bahawa anda menggunakan yang betul. 105 00:07:03,570 --> 00:07:08,700 Jadi sekali lagi, fwrite, apabila anda mempunyai fail yang anda mahu untuk menulis ke dalam, 106 00:07:08,700 --> 00:07:14,290 yang akan menjadi hujah terakhir dan itu akan menjadi penunjuk kepada fail tersebut. 107 00:07:14,290 --> 00:07:18,670 Jadi maka itulah bagaimana kita berurusan dengan menulis mungkin bytes beberapa pada satu-satu masa, 108 00:07:18,670 --> 00:07:21,820 tetapi mengatakan anda hanya mahu menulis hanya dalam watak satu. 109 00:07:21,820 --> 00:07:25,940 Seperti yang kita akan lihat nanti dalam contoh ini, dalam bitmap kita akan perlu untuk menggunakan bahawa. 110 00:07:25,940 --> 00:07:32,180 Itulah apabila kita boleh menggunakan fputc, dasarnya hanya meletakkan satu watak pada satu masa, Chr, 111 00:07:32,180 --> 00:07:37,050 ke penunjuk fail, dan bahawa penunjuk keluar kami di sana. 112 00:07:38,700 --> 00:07:41,560 Jadi maka apabila kita mencari atau menulis dalam fail, 113 00:07:41,560 --> 00:07:44,690 fail mengesan di mana kita berada. 114 00:07:44,690 --> 00:07:47,810 Jadi ia adalah satu jenis kursor, penunjuk fail kedudukan. 115 00:07:47,810 --> 00:07:54,330 Dan sebagainya apabila kita menulis atau membaca semula ke dalam fail, 116 00:07:54,330 --> 00:07:56,760 fail sebenarnya ingat di mana ia adalah, 117 00:07:56,760 --> 00:07:59,270 dan sebagainya ia terus dari mana kursor berada. 118 00:07:59,270 --> 00:08:03,970 Ini boleh menjadi bermanfaat apabila anda mahu, katakan, membaca dalam jumlah tertentu untuk melakukan sesuatu 119 00:08:03,970 --> 00:08:06,160 dan kemudian membaca dalam jumlah yang berikut, 120 00:08:06,160 --> 00:08:10,700 tetapi kadang-kadang kita mungkin mahu untuk kembali atau sebenarnya bermula dari nilai rujukan tertentu. 121 00:08:10,700 --> 00:08:16,870 Jadi maka fungsi fseek, apa yang ia adalah membolehkan kita untuk menggerakkan kursor dalam fail tertentu 122 00:08:16,870 --> 00:08:19,680 sebilangan bait. 123 00:08:19,680 --> 00:08:24,260 Dan kemudian apa yang perlu kita lakukan adalah menentukan di mana nilai rujukan. 124 00:08:24,260 --> 00:08:31,520 Jadi, sama ada ia bergerak ke hadapan atau ke belakang dari mana kursor pada masa ini, 125 00:08:31,520 --> 00:08:35,750 atau kita boleh menentukan bahawa ia hanya perlu bergerak masuk dari awal fail 126 00:08:35,750 --> 00:08:37,090 atau dari akhir fail. 127 00:08:37,090 --> 00:08:41,230 Dan sebagainya anda boleh lulus dalam nilai-nilai positif atau negatif kepada jumlah, 128 00:08:41,230 --> 00:08:44,960 dan yang jenis akan menggerakkan kursor sama ada ke hadapan atau ke belakang. 129 00:08:46,170 --> 00:08:51,920 >> Sebelum kita mendapat ke psets lain, apa-apa soalan mengenai fail I / O? 130 00:08:53,860 --> 00:08:59,990 Okay. Seperti yang kita masuk ke dalam contoh yang lebih, berasa bebas untuk menghentikan saya untuk soalan. 131 00:08:59,990 --> 00:09:06,930 >> Jadi dalam Kisah penyiasatan, anda menyerahkan fail bitmap yang serupa dengan yang satu ini merah pada slaid, 132 00:09:06,930 --> 00:09:14,510 dan ia kelihatan seperti ini - sekumpulan titik merah - dan anda tidak benar-benar tahu apa yang ditulis. 133 00:09:14,510 --> 00:09:23,310 Jika anda juling, anda mungkin dapat melihat sedikit warna kebiruan di dalam tengah-tengah. 134 00:09:23,310 --> 00:09:26,270 Pada asasnya, yang mana teks disimpan. 135 00:09:26,270 --> 00:09:30,270 Terdapat adalah satu pembunuhan yang berlaku, dan kita perlu untuk mengetahui siapa yang melakukannya. 136 00:09:30,270 --> 00:09:36,760 Dalam usaha untuk berbuat demikian, kita perlu jenis menukar imej ini ke dalam format yang boleh dibaca. 137 00:09:36,760 --> 00:09:42,740 Jika anda lelaki yang pernah dihadapi ini, kadang-kadang ada akan menjadi kit kecil 138 00:09:42,740 --> 00:09:48,510 di mana anda akan mempunyai kaca pembesar dengan filem merah. Sesiapa sahaja? Yeah. 139 00:09:48,510 --> 00:09:52,770 Jadi, anda akan menjadi sesuatu yang tangan seperti ini, anda akan mempunyai kaca pembesar 140 00:09:52,770 --> 00:09:58,130 dengan filem merah di atasnya, anda akan meletakkan ia atas imej, 141 00:09:58,130 --> 00:10:03,410 dan anda akan dapat melihat mesej tersembunyi di dalamnya. 142 00:10:03,410 --> 00:10:07,080 Kami tidak mempunyai kaca pembesar dengan filem merah, jadi sebaliknya kita pergi kepada jenis buat kita sendiri 143 00:10:07,080 --> 00:10:09,060 dalam pset ini. 144 00:10:09,060 --> 00:10:15,760 Dan supaya pengguna akan Kisah penyiasatan input, maka petunjuk, bmp, 145 00:10:15,760 --> 00:10:18,800 supaya adalah infile, itulah mesej titik merah, 146 00:10:18,800 --> 00:10:23,550 dan kemudian mereka mengatakan verdict.bmp akan menjadi outfile kami. 147 00:10:23,550 --> 00:10:27,900 Jadi ia akan mewujudkan imej bitmap baru serupa dengan satu petunjuk 148 00:10:27,900 --> 00:10:32,600 kecuali dalam format yang boleh dibaca di mana kita boleh melihat mesej yang tersembunyi. 149 00:10:32,600 --> 00:10:37,550 >> Sejak kita akan perlu berurusan dengan menyunting dan memanipulasi bitmap sejenis, 150 00:10:37,550 --> 00:10:42,400 kita akan jenis menyelam ke dalam struktur fail-fail bitmap. 151 00:10:42,400 --> 00:10:48,130 Kami pergi lebih sedikit-sedikit dalam kuliah, tetapi mari kita lihat ke dalam mereka beberapa lagi. 152 00:10:48,130 --> 00:10:51,740 Bitmap dasarnya hanya susunan bait 153 00:10:51,740 --> 00:10:55,790 di mana kita telah dinyatakan yang bait bermakna apa. 154 00:10:55,790 --> 00:11:00,540 Jadi di sini adalah jenis seperti peta imej bitmap 155 00:11:00,540 --> 00:11:08,550 mengatakan bahawa ia bermula dengan beberapa fail header, bermula dengan beberapa maklumat di sana. 156 00:11:08,550 --> 00:11:16,540 Anda lihat bahawa di beberapa kira-kira 14 bait saiz ditunjukkan imej bitmap, 157 00:11:16,540 --> 00:11:18,520 dan ia terus. 158 00:11:18,520 --> 00:11:23,810 Tetapi kemudian apa yang kita benar-benar berminat di sini bermula sekitar beberapa bait 54. 159 00:11:23,810 --> 00:11:26,060 Kami mempunyai tiga kali ganda RGB. 160 00:11:26,060 --> 00:11:30,760 Apa yang akan lakukan adalah mengandungi piksel sebenar, nilai warna. 161 00:11:30,760 --> 00:11:35,950 Segalanya atas bahawa dalam pengepala adalah beberapa maklumat 162 00:11:35,950 --> 00:11:41,240 sepadan dengan saiz imej, lebar imej, dan ketinggian. 163 00:11:41,240 --> 00:11:44,930 Apabila kita pergi ke padding kemudian, kita akan lihat kenapa saiz imej 164 00:11:44,930 --> 00:11:48,670 mungkin berbeza daripada lebar atau ketinggian. 165 00:11:48,670 --> 00:11:54,240 Demikian maka untuk mewakili ini - imej-imej bitmap adalah jujukan bait - 166 00:11:54,240 --> 00:11:59,370 apa yang kita boleh lakukan berkata okay, saya akan ingat bahawa pada indeks 14, 167 00:11:59,370 --> 00:12:03,380 yang mana saiz, misalnya, tetapi sebaliknya apa yang kita akan lakukan untuk membuat ini lebih mudah 168 00:12:03,380 --> 00:12:06,020 adalah merangkumi ia dalam struct. 169 00:12:06,020 --> 00:12:08,880 Dan maka kita mempunyai dua structs dibuat untuk kita, BITMAPFILEHEADER 170 00:12:08,880 --> 00:12:10,440 dan BITMAPINFOHEADER, 171 00:12:10,440 --> 00:12:14,840 dan sebagainya apabila kita baca di dalam fail itu, secara lalai ia akan pergi dalam perintah, 172 00:12:14,840 --> 00:12:22,360 dan sebagainya dalam usaha ia juga akan mengisi ke dalam pembolehubah seperti biWidth dan biSize. 173 00:12:25,270 --> 00:12:31,230 Dan kemudian akhirnya, setiap piksel diwakili oleh tiga bait. 174 00:12:31,230 --> 00:12:35,500 Yang pertama adalah jumlah biru dalam piksel, yang kedua ialah jumlah hijau, 175 00:12:35,500 --> 00:12:41,120 dan akhirnya, jumlah merah, di mana 0 adalah asasnya tiada hijau biru atau tiada atau tidak merah 176 00:12:41,120 --> 00:12:43,720 dan kemudian seterusnya adalah nilai maksimum. 177 00:12:43,720 --> 00:12:46,800 Ini adalah nilai perenambelasan. 178 00:12:46,800 --> 00:12:53,870 Jadi, maka jika kita mempunyai FF0000, maka yang sepadan dengan jumlah maksimum biru 179 00:12:53,870 --> 00:12:58,890 dan kemudian tiada hijau dan tiada merah, maka yang akan memberi kita pixel biru. 180 00:12:58,890 --> 00:13:04,190 Kemudian jika kita mempunyai semua ff yang menyeluruh, maka itu bermakna bahawa kita mempunyai piksel putih. 181 00:13:04,190 --> 00:13:11,370 Ini adalah jenis bertentangan dengan biasanya apabila kita katakan RGB. Ia sebenarnya akan BGR. 182 00:13:12,750 --> 00:13:18,990 >> Jadi, jika kita benar-benar melihat ke dalam contoh imej bitmap - izinkan saya tarik satu di sini. 183 00:13:31,560 --> 00:13:33,830 Ia adalah sedikit kecil. 184 00:13:39,890 --> 00:13:47,840 Saya zoom di, dan kita boleh melihat ia pixelated. Ia kelihatan seperti blok warna. 185 00:13:47,840 --> 00:13:50,110 Anda mempunyai blok putih dan kemudian blok merah. 186 00:13:50,110 --> 00:13:53,700 Jika anda bermain dalam cat Microsoft, misalnya, anda boleh membuat sesuatu seperti itu 187 00:13:53,700 --> 00:13:58,960 oleh pada dasarnya hanya lukisan dataran tertentu dalam susunan yang tertentu. 188 00:13:58,960 --> 00:14:08,060 Demikian maka apa yang ini diterjemahkan dalam bitmap yang adalah seperti berikut. 189 00:14:08,060 --> 00:14:15,710 Di sini kita mempunyai piksel putih pertama, bahawa semua 6 adalah f itu, dan kemudian kita mempunyai piksel merah, 190 00:14:15,710 --> 00:14:19,910 ditunjukkan oleh 0000ff. 191 00:14:19,910 --> 00:14:27,940 Dan sebagainya urutan bait yang kita ada menunjukkan bagaimana imej bitmap akan kelihatan. 192 00:14:27,940 --> 00:14:32,230 Jadi apa yang saya lakukan di sini hanya ditulis semua orang bait dan kemudian berwarna merah 193 00:14:32,230 --> 00:14:37,550 supaya anda jenis boleh lihat, jika anda juling sedikit, bagaimana yang jenis menunjukkan muka senyum. 194 00:14:40,180 --> 00:14:46,390 >> Cara yang bitmap imej adalah kerja saya membayangkan ia pada dasarnya sebagai grid. 195 00:14:46,390 --> 00:14:54,940 Dan demikian dengan lalai, setiap baris grid mempunyai untuk menjadi dibahagikan dengan 4 bait. 196 00:15:00,520 --> 00:15:07,060 Jika kita melihat imej bitmap, anda mengisi setiap nilai. 197 00:15:07,060 --> 00:15:17,370 Sebagai contoh, anda mungkin mempunyai merah di sini, hijau di sini, biru di sini, 198 00:15:17,370 --> 00:15:24,950 tetapi anda perlu pastikan bahawa imej diisi dengan pelbagai empat bait. 199 00:15:24,950 --> 00:15:32,200 Jadi jika saya mahu imej saya untuk menjadi tiga blok lebar, maka saya akan perlu untuk meletakkan nilai kosong 200 00:15:32,200 --> 00:15:35,640 dalam salah satu yang terakhir untuk membuat ia satu gandaan empat. 201 00:15:35,640 --> 00:15:39,530 Jadi, maka saya akan menambah sesuatu yang kita memanggil padding. 202 00:15:39,530 --> 00:15:43,750 Saya hanya akan menunjukkan bahawa terdapat dengan x. 203 00:15:44,920 --> 00:15:54,160 Sekarang katakan kita mahu imej yang 7 piksel panjang, misalnya. 204 00:15:54,160 --> 00:15:59,550 Kami mempunyai 1, 2, 3, 4, 5, 6, 7, 205 00:16:04,750 --> 00:16:07,000 dan semua yang dipenuhi dengan warna. 206 00:16:07,000 --> 00:16:10,620 Cara bahawa imej bitmap bekerja adalah bahawa kita perlu 8. 207 00:16:10,620 --> 00:16:12,460 Sekarang kita mempunyai 1, 2, 3, 4, 5, 6, 7. 208 00:16:12,460 --> 00:16:19,360 Kita perlu 8 ruangan untuk imej bitmap untuk membaca dengan betul. 209 00:16:19,360 --> 00:16:25,600 Jadi maka apa yang perlu kita lakukan adalah menambah hanya sedikit padding 210 00:16:25,600 --> 00:16:29,430 untuk memastikan bahawa semua lebar adalah seragam 211 00:16:29,430 --> 00:16:34,260 dan bahawa semua lebar adalah gandaan 4. 212 00:16:42,110 --> 00:16:47,310 Dan jadi saya sebelum ini menunjukkan, padding sebagai x atau garis berlekuk-lekuk, 213 00:16:47,310 --> 00:16:53,880 tetapi dalam bitmap imej sebenar padding ditunjukkan oleh perenambelasan 0. 214 00:16:53,880 --> 00:16:57,340 Jadi yang akan menjadi watak tunggal, 0. 215 00:16:58,980 --> 00:17:06,329 Apa yang mungkin datang dalam berguna adalah arahan xxd. 216 00:17:06,329 --> 00:17:11,220 Apa yang ia adalah sebenarnya menunjukkan anda, seperti yang serupa dengan apa yang saya lakukan sebelum ini dengan smiley 217 00:17:11,220 --> 00:17:15,630 apabila saya sebenarnya dicetak apa warna masing-masing akan bagi piksel 218 00:17:15,630 --> 00:17:21,800 dan kemudian warna berkod, apabila anda menjalankan xxd dengan arahan berikut, 219 00:17:21,800 --> 00:17:28,670 maka ia sebenarnya akan mencetak apa warna bagi mereka piksel. 220 00:17:28,670 --> 00:17:33,810 Apa yang anda perlu lakukan adalah di sini saya menunjukkan, seperti s-54 221 00:17:33,810 --> 00:17:36,530 mengatakan bahawa saya akan bermula pada bait ke-54 222 00:17:36,530 --> 00:17:40,820 kerana sebelum itu, ingat jika kita melihat kembali ke peta daripada bitmap, 223 00:17:40,820 --> 00:17:42,690 itulah semua maklumat header dan perkara-perkara seperti itu. 224 00:17:42,690 --> 00:17:46,280 Tetapi apa yang kita benar-benar mengambil berat tentang adalah piksel sebenar yang menunjukkan warna. 225 00:17:46,280 --> 00:17:52,700 Jadi dengan menambah dalam bendera yang-s 54, maka kita dapat melihat nilai warna. 226 00:17:52,700 --> 00:17:56,020 Dan jangan bimbang tentang bendera dan perkara-perkara rumit seperti itu. 227 00:17:56,020 --> 00:18:05,020 Dalam spec set masalah, anda akan mempunyai arahan bagaimana untuk menggunakan xxd untuk memaparkan piksel. 228 00:18:07,070 --> 00:18:15,590 Jadi, jika anda lihat di sini, ia jenis kelihatan seperti kotak hijau, ini perkara kecil. 229 00:18:15,590 --> 00:18:23,610 Saya telah dikod warna 00ff00 sebagai pada dasarnya mengatakan tidak biru, banyak hijau, dan tiada merah. 230 00:18:23,610 --> 00:18:26,370 Jadi yang sepadan kepada hijau. 231 00:18:26,370 --> 00:18:31,920 Seperti yang anda lihat di sini, kita lihat sebuah segiempat tepat yang hijau. 232 00:18:31,920 --> 00:18:36,660 Ini segi empat tepat hijau adalah hanya 3 piksel lebar, maka apa yang perlu kita lakukan 233 00:18:36,660 --> 00:18:44,350 untuk memastikan bahawa imej adalah pelbagai daripada 4 lebar adalah menambah padding tambahan. 234 00:18:44,350 --> 00:18:49,460 Dan sebagainya maka itulah bagaimana anda melihat 0s ini di sini. 235 00:18:49,460 --> 00:18:54,510 Ini sebenarnya akan hasil daripada pset Resize anda, 236 00:18:54,510 --> 00:19:01,350 dasarnya mengambil bitmap kecil dan kemudian membesarkan dengan 4. 237 00:19:01,350 --> 00:19:09,380 Dan supaya apa yang kita lihat ialah bahawa sebenarnya imej ini adalah 12 piksel lebar, tetapi 12 adalah gandaan 4, 238 00:19:09,380 --> 00:19:12,940 dan sebagainya kita sebenarnya tidak melihat apa-apa 0s pada akhir kerana kita tidak perlu menambah sebarang 239 00:19:12,940 --> 00:19:19,070 kerana ia sepenuhnya berpad. Ia tidak mempunyai mana-mana bilik lebih. 240 00:19:20,720 --> 00:19:23,470 >> Okay. Sebarang pertanyaan tentang padding? 241 00:19:25,150 --> 00:19:27,460 Okay. Sejuk. 242 00:19:27,460 --> 00:19:32,520 >> Seperti yang saya nyatakan sebelum ini, bitmap hanya jujukan bait. 243 00:19:32,520 --> 00:19:39,170 Dan supaya apa yang kita ada adalah sebaliknya perlu menjejaki tepat nombor yang bait 244 00:19:39,170 --> 00:19:47,050 sepadan dengan elemen tertentu, kita sebenarnya telah mencipta satu struct untuk mewakili bahawa. 245 00:19:47,050 --> 00:19:50,930 Jadi apa yang kita ada adalah struct RGBTRIPLE. 246 00:19:50,930 --> 00:19:54,590 Apabila anda mempunyai contoh tiga RGB, 247 00:19:54,590 --> 00:20:00,970 kerana ini adalah jenis menentukan struct, maka anda boleh mengakses pembolehubah rgbtBlue, 248 00:20:00,970 --> 00:20:09,520 begitu pembolehubah Hijau dan Merah, yang akan menunjukkan berapa banyak biru, hijau, dan merah, 249 00:20:09,520 --> 00:20:11,580 masing-masing, anda perlu. 250 00:20:11,580 --> 00:20:16,800 >> Jadi, jika kita mempunyai set pembolehubah biru kepada 0, set hijau ff, 251 00:20:16,800 --> 00:20:22,060 yang merupakan nilai maksimum yang anda boleh mempunyai, dan kemudian pembolehubah merah disetkan kepada 0, 252 00:20:22,060 --> 00:20:27,870 maka apa warna ini RGB tiga tertentu akan mewakili? >> [Pelajar] Hijau. 253 00:20:27,870 --> 00:20:29,150 Hijau. Tepat sekali. 254 00:20:29,150 --> 00:20:34,480 Ia akan menjadi berguna untuk mengetahui bahawa apabila anda mempunyai contoh tiga RGB, 255 00:20:34,480 --> 00:20:41,340 anda sebenarnya boleh mengakses jumlah warna - biru, hijau, dan merah - berasingan. 256 00:20:43,350 --> 00:20:54,900 >> Sekarang kita telah bercakap tentang struktur itu, mari kita lihat di fail BMP. 257 00:20:54,900 --> 00:20:57,870 Ini adalah structs yang dibuat untuk anda. 258 00:20:57,870 --> 00:21:01,820 Di sini kita mempunyai struct BITMAPFILEHEADER. 259 00:21:01,820 --> 00:21:07,610 Faedah adalah saiz. 260 00:21:07,610 --> 00:21:12,660 Kemudian, kita mempunyai header info, yang mempunyai beberapa perkara yang menarik untuk kami, 261 00:21:12,660 --> 00:21:15,480 iaitu saiz, lebar, dan ketinggian. 262 00:21:15,480 --> 00:21:19,170 Seperti yang kita akan pergi ke kemudian, apabila anda membaca dalam ke fail, 263 00:21:19,170 --> 00:21:25,500 ia secara automatik membaca kerana kita telah menetapkan perintah itu untuk menjadi sama. 264 00:21:25,500 --> 00:21:31,990 Jadi biSize akan mengandungi bait hak yang sesuai dengan saiz sebenar imej. 265 00:21:34,700 --> 00:21:40,500 Dan kemudian di sini, akhirnya, seperti yang kita telah bercakap tentang, kita mempunyai struct typedef RGBTRIPLE. 266 00:21:40,500 --> 00:21:46,840 Kami mempunyai satu rgbtBlue, Hijau, dan Red dikaitkan dengannya. 267 00:21:48,210 --> 00:21:49,340 >> Besar. Okay. 268 00:21:49,340 --> 00:21:56,360 Sekarang kita memahami bitmap sedikit, faham bahawa kita mempunyai tandukan fail 269 00:21:56,360 --> 00:22:00,790 dan header info yang dikaitkan dengan ia dan kemudian selepas itu, kita mempunyai barangan yang menarik 270 00:22:00,790 --> 00:22:05,110 warna, dan orang-orang warna yang diwakili oleh structs RGBTRIPLE, 271 00:22:05,110 --> 00:22:12,710 dan mereka, sebaliknya, mempunyai tiga nilai-nilai yang berkaitan kepada biru, hijau, dan merah. 272 00:22:12,710 --> 00:22:17,270 >> Jadi sekarang, kita boleh jenis berfikir tentang pulihkan sedikit. 273 00:22:17,270 --> 00:22:20,130 Maaf. Fikirkan tentang Kisah penyiasatan. 274 00:22:20,130 --> 00:22:25,750 Apabila kita mempunyai fail petunjuk kami, maka apa yang kita mahu lakukan adalah membaca dalam ia piksel oleh piksel 275 00:22:25,750 --> 00:22:33,860 dan kemudian entah bagaimana menukar mereka piksel supaya kita boleh mengeluarkan ia ke dalam format yang boleh dibaca. 276 00:22:33,860 --> 00:22:41,020 Dan sebagainya untuk menayangkan, kita pergi untuk menulis piksel oleh piksel ke dalam fail verdict.bmp. 277 00:22:41,020 --> 00:22:45,120 Itulah jenis banyak lakukan. Kami sedar bahawa. 278 00:22:45,120 --> 00:22:49,860 Jadi apa yang kami lakukan adalah kita telah benar-benar menyediakan anda dengan copy.c. 279 00:22:49,860 --> 00:22:57,610 Apa copy.c tidak hanya membuat salinan tepat sesuatu fail bitmap yang diberikan dan kemudian output. 280 00:22:57,610 --> 00:23:01,900 Jadi ini sudah membuka fail untuk anda, membaca piksel oleh piksel, 281 00:23:01,900 --> 00:23:04,510 dan kemudian menulis ke dalam fail output. 282 00:23:04,510 --> 00:23:07,080 >> Mari kita lihat pada itu. 283 00:23:13,390 --> 00:23:18,290 Ini memastikan penggunaan yang betul, 284 00:23:18,290 --> 00:23:22,640 mendapatkan nama fail di sini. 285 00:23:22,640 --> 00:23:29,940 Apakah ini tidak adalah ia menetapkan fail input untuk menjadi apa yang kita telah meninggal di dalam infile di sini, 286 00:23:29,940 --> 00:23:34,750 yang merupakan hujah baris arahan kedua kami. 287 00:23:34,750 --> 00:23:37,640 Memeriksa untuk memastikan bahawa kita boleh membuka fail tersebut. 288 00:23:38,960 --> 00:23:44,860 Pemeriksaan untuk memastikan kita boleh membuat outfile baru di sini. 289 00:23:45,630 --> 00:23:53,270 Kemudian apa ini tidak di sini, ia hanya pada dasarnya mula membaca masuk ke fail bitmap dari awal. 290 00:23:53,270 --> 00:23:56,700 Permulaan, seperti yang kita tahu, mengandungi BITMAPFILEHEADER, 291 00:23:56,700 --> 00:24:03,200 dan supaya orang-orang jujukan bit langsung akan mengisi dalam BITMAPFILEHEADER. 292 00:24:03,200 --> 00:24:07,940 Jadi apa yang kita ada di sini mengatakan bahawa bf BITMAPFILEHEADER - 293 00:24:07,940 --> 00:24:13,150 itulah pembolehubah baru kami BITMAPFILEHEADER jenis - 294 00:24:13,150 --> 00:24:22,560 kita akan diletakkan di dalam bf apa yang kita baca dari dalam penunjuk, yang infile kami. 295 00:24:22,560 --> 00:24:23,970 Berapa banyak yang kita baca? 296 00:24:23,970 --> 00:24:32,160 Kita membaca dalam berapa banyak bait kita perlu mengandungi BITMAPFILEHEADER keseluruhan. 297 00:24:32,160 --> 00:24:34,660 Begitu juga, bahawa apa yang kita lakukan untuk header info. 298 00:24:34,660 --> 00:24:39,010 Jadi kita sedang berterusan sepanjang fail kami di infile, 299 00:24:39,010 --> 00:24:44,360 dan kami membaca mereka bit dan bait, dan kami sedang memasang mereka secara langsung dalam 300 00:24:44,360 --> 00:24:47,880 ke contoh pembolehubah bahawa kita sedang membuat. 301 00:24:49,370 --> 00:24:53,800 Di sini kita hanya membuat pasti bahawa bitmap adalah bitmap. 302 00:24:57,670 --> 00:25:01,030 >> Sekarang kita mempunyai outfile satu, kan? 303 00:25:01,030 --> 00:25:04,420 Jadi kerana ia bermaksud apabila kita buat, ia adalah pada dasarnya kosong. 304 00:25:04,420 --> 00:25:07,710 Jadi kita perlu pada dasarnya mewujudkan bitmap yang baru dari awal. 305 00:25:07,710 --> 00:25:12,280 Apa yang kita lakukan ialah kita perlu memastikan bahawa kita menyalin dalam pengepala fail 306 00:25:12,280 --> 00:25:16,850 dan header info seperti infile mempunyai. 307 00:25:16,850 --> 00:25:22,850 Apa yang kita lakukan ialah kita menulis - dan ingat bahawa bf adalah pembolehubah 308 00:25:22,850 --> 00:25:29,300 BITMAPFILEHEADER jenis, jadi apa yang kita lakukan ialah kita hanya menggunakan kandungan yang 309 00:25:29,300 --> 00:25:34,980 untuk menulis ke outfile. 310 00:25:36,550 --> 00:25:38,510 Di sini, ingat kita bercakap tentang padding, 311 00:25:38,510 --> 00:25:47,820 bagaimana ia adalah penting untuk memastikan bahawa jumlah piksel yang kita ada adalah gandaan 4. 312 00:25:47,820 --> 00:25:52,790 Ini adalah formula yang cukup berguna untuk mengira berapa banyak padding anda mempunyai 313 00:25:52,790 --> 00:25:57,670 diberikan lebar fail anda. 314 00:25:57,670 --> 00:26:04,120 Saya mahu anda semua untuk ingat bahawa di copy.c kita mempunyai formula untuk mengira padding. 315 00:26:04,120 --> 00:26:07,970 Okey? Jadi semua orang ingat bahawa. Besar. 316 00:26:07,970 --> 00:26:14,050 Demikian maka apa copy.c seterusnya adalah lelaran ke atas semua daripada scanlines. 317 00:26:14,050 --> 00:26:23,730 Ia pergi melalui baris pertama dan kemudian menyimpan setiap triple bahawa ia membaca 318 00:26:23,730 --> 00:26:26,920 dan kemudian menulis ke outfile. 319 00:26:26,920 --> 00:26:33,120 Jadi maka di sini kita membaca hanya satu RGB tiga pada satu masa 320 00:26:33,120 --> 00:26:39,860 dan kemudian meletakkan bahawa triple sama ke outfile. 321 00:26:41,120 --> 00:26:48,340 Bahagian yang agak rumit adalah bahawa padding tidak merupakan tiga RGB, 322 00:26:48,340 --> 00:26:55,200 dan sebagainya kita tidak boleh hanya membaca bahawa jumlah padding triple RGB. 323 00:26:55,200 --> 00:27:01,460 Apa yang perlu kita lakukan adalah sebenarnya hanya bergerak penunjuk kedudukan fail kami, menggerakkan kursor kami, 324 00:27:01,460 --> 00:27:06,840 kepada jenis skip ke atas semua padding supaya kita berada di barisan seterusnya. 325 00:27:06,840 --> 00:27:12,990 Dan kemudian apa ini tidak adalah salinan menunjukkan bagaimana anda mungkin mahu untuk menambah padding. 326 00:27:12,990 --> 00:27:14,990 Jadi kita telah dikira berapa banyak padding yang kita perlu, 327 00:27:14,990 --> 00:27:18,220 supaya bermakna bahawa kita perlu nombor padding daripada 0s. 328 00:27:18,220 --> 00:27:24,510 Apakah ini tidak adalah untuk gelung yang meletakkan nombor padding-0s ke outfile kami. 329 00:27:24,510 --> 00:27:31,170 Dan kemudian akhirnya, anda menutup kedua-dua fail. Anda menutup infile serta outfile. 330 00:27:31,170 --> 00:27:34,870 >> Jadi itulah bagaimana copy.c kerja, 331 00:27:34,870 --> 00:27:37,430 dan itulah akan menjadi agak berguna. 332 00:27:39,720 --> 00:27:43,750 Sebaliknya hanya sebenarnya langsung menyalin dan menampal 333 00:27:43,750 --> 00:27:46,800 atau hanya melihat dan menaip apa sahaja yang anda mahu, 334 00:27:46,800 --> 00:27:49,440 anda hanya mungkin mahu untuk melaksanakan arahan ini di terminal, 335 00:27:49,440 --> 00:27:54,520 cp copy.c whodunit.c, yang akan mencipta fail baru, whodunit.c, 336 00:27:54,520 --> 00:27:58,330 yang mengandungi kandungan yang tepat sama sebagai salinan tidak. 337 00:27:58,330 --> 00:28:03,880 Jadi maka apa yang kita boleh lakukan menggunakan bahawa sebagai rangka kerja di mana untuk membina dan mengedit 338 00:28:03,880 --> 00:28:06,900 untuk fail Kisah penyiasatan kami. 339 00:28:08,500 --> 00:28:14,670 >> Ini adalah kami untuk tugasan untuk melakukan Kisah penyiasatan, tetapi apa copy.c tidak 340 00:28:14,670 --> 00:28:16,730 sebenarnya menjaga kebanyakan daripada mereka untuk kita. 341 00:28:16,730 --> 00:28:21,900 Jadi semua yang kita perlu lakukan seterusnya ialah menukar piksel seperti yang diperlukan 342 00:28:21,900 --> 00:28:25,920 untuk benar-benar membuat fail yang boleh dibaca. 343 00:28:25,920 --> 00:28:32,960 Ingatlah bahawa untuk piksel triple diberikan, jadi pembolehubah diberikan RGBTRIPLE jenis, 344 00:28:32,960 --> 00:28:35,990 anda boleh mengakses nilai biru, hijau, dan merah. 345 00:28:35,990 --> 00:28:38,670 Itu akan datang dalam berguna kerana jika anda boleh mengakses mereka, 346 00:28:38,670 --> 00:28:41,770 yang bermaksud bahawa anda juga boleh menyemak mereka, 347 00:28:41,770 --> 00:28:45,430 dan ini bermakna bahawa anda juga boleh menukar mereka. 348 00:28:45,430 --> 00:28:49,430 >> Jadi, apabila kita kembali kepada kaca pembesar contoh merah kami, 349 00:28:49,430 --> 00:28:53,390 pada dasarnya, yang telah bertindak sebagai sejenis penapis untuk kita. 350 00:28:53,390 --> 00:28:58,160 Jadi apa yang kita mahu lakukan ialah kita mahu untuk menapis semua tiga kali ganda yang datang masuk 351 00:28:58,160 --> 00:29:01,240 Terdapat beberapa cara yang berbeza untuk melakukan ini. 352 00:29:01,240 --> 00:29:07,100 Pada asasnya, anda boleh mempunyai apa jua jenis penapis yang anda mahu. 353 00:29:07,100 --> 00:29:09,890 Mungkin anda mahu mengubah semua piksel merah 354 00:29:09,890 --> 00:29:13,570 atau mungkin anda mahu untuk menukar piksel warna yang berbeza dengan warna yang berbeza. 355 00:29:13,570 --> 00:29:15,400 Itu terpulang kepada anda. 356 00:29:15,400 --> 00:29:19,580 Ingatlah bahawa anda boleh menyemak apa warna piksel adalah 357 00:29:19,580 --> 00:29:23,000 dan kemudian anda juga boleh menukar ia sebagai anda pergi melalui. 358 00:29:24,410 --> 00:29:26,420 >> Okay. Jadi itulah Kisah penyiasatan. 359 00:29:26,420 --> 00:29:32,760 Sebaik sahaja anda menjalankan Kisah penyiasatan, anda akan tahu yang punca jenayah. 360 00:29:32,760 --> 00:29:35,540 >> Sekarang kita akan pergi ke Saiz semula. 361 00:29:35,540 --> 00:29:37,990 Kami akan masih boleh berurusan dengan bitmap. 362 00:29:37,990 --> 00:29:40,750 Apa yang kita akan lakukan adalah kita akan mempunyai bitmap input 363 00:29:40,750 --> 00:29:45,890 dan kemudian kita pergi untuk lulus dalam nombor dan kemudian mendapatkan bitmap outfile 364 00:29:45,890 --> 00:29:51,380 mana yang pada dasarnya infile kami diskalakan oleh n. 365 00:29:54,670 --> 00:30:01,450 Katakanlah fail saya adalah hanya satu piksel besar. 366 00:30:01,450 --> 00:30:09,100 Kemudian jika n saya adalah 3, bersisik dengan 3, maka saya akan mengulangi bahawa piksel n beberapa kali, 367 00:30:09,100 --> 00:30:14,410 jadi 3 kali, dan kemudian juga skala ia ke 3 kali juga. 368 00:30:14,410 --> 00:30:17,840 Jadi anda lihat Saya mendaki ia menegak serta mendatar. 369 00:30:17,840 --> 00:30:19,680 >> Dan kemudian di sini adalah satu contoh. 370 00:30:19,680 --> 00:30:27,590 Jika anda mempunyai n 2 =, anda lihat bahawa piksel biru pertama terdapat diulangi dua kali 371 00:30:27,590 --> 00:30:30,930 mendatar seperti yang baik sebagai dua kali menegak. 372 00:30:30,930 --> 00:30:38,040 Dan kemudian yang terus, dan supaya anda mempunyai bersisik langsung imej asal anda dengan dua. 373 00:30:40,920 --> 00:30:47,600 >> Jadi maka jika kita kepada perincian pseudokod untuk ini, kita mahu untuk membuka fail. 374 00:30:47,600 --> 00:30:49,880 Dan kemudian mengetahui bahawa jika kita kembali di sini, 375 00:30:49,880 --> 00:30:54,540 kita lihat bahawa lebar untuk outfile yang akan menjadi berbeza daripada lebar untuk infile. 376 00:30:54,540 --> 00:30:56,130 Apa maksudnya? 377 00:30:56,130 --> 00:31:01,230 Ini bermakna bahawa maklumat header kami akan berubah. 378 00:31:01,230 --> 00:31:03,790 Dan supaya apa yang kita akan mahu lakukan adalah mengemaskini maklumat header, 379 00:31:03,790 --> 00:31:11,820 mengetahui bahawa apabila kita membaca dalam fail jika anda beroperasi pada rangka copy.c, 380 00:31:11,820 --> 00:31:17,570 kita sudah mempunyai satu pemboleh ubah yang menunjukkan apa saiz dan perkara-perkara seperti itu. 381 00:31:17,570 --> 00:31:24,060 Jadi apabila anda mempunyai bahawa, apa yang anda mungkin mahu lakukan adalah menukar pembolehubah tertentu. 382 00:31:24,060 --> 00:31:29,380 Ingat, jika anda mempunyai struct, bagaimana anda mengakses pembolehubah dalam tempoh itu. 383 00:31:29,380 --> 00:31:32,080 Anda menggunakan operator dot, bukan? 384 00:31:32,080 --> 00:31:36,420 Jadi kemudian menggunakan bahawa, anda tahu bahawa anda akan perlu untuk menukar maklumat pengepala. 385 00:31:36,480 --> 00:31:41,030 Jadi di sini adalah hanya satu senarai elemen-elemen sebenar yang akan berubah dalam fail anda. 386 00:31:41,030 --> 00:31:45,180 Saiz fail akan berubah, imej, serta lebar dan ketinggian. 387 00:31:45,180 --> 00:31:50,080 Demikian maka akan kembali ke peta daripada bitmap, 388 00:31:50,080 --> 00:31:57,730 melihat sama ada ia adalah pengepala fail atau header info yang mengandungi maklumat yang 389 00:31:57,730 --> 00:32:00,920 dan kemudian berubah seperti yang diperlukan. 390 00:32:05,010 --> 00:32:12,470 Sekali lagi, katakan cp copy.c resize.c. 391 00:32:12,470 --> 00:32:19,270 Ini bermakna bahawa resize.c kini mengandungi segala yang terkandung di dalam salinan 392 00:32:19,270 --> 00:32:24,490 kerana salinan memberikan kita cara membaca dalam setiap piksel scanline oleh piksel. 393 00:32:24,490 --> 00:32:29,860 Kecuali kini, bukan hanya mengubah nilai seperti yang kita lakukan dalam Kisah penyiasatan, 394 00:32:29,860 --> 00:32:37,980 apa yang kita mahu lakukan ialah kita mahu menulis dalam piksel berganda 395 00:32:37,980 --> 00:32:43,580 selagi n kami adalah lebih daripada 1. 396 00:32:43,580 --> 00:32:47,110 >> Kemudian apa yang kita mahu lakukan ialah kita mahu menghulurkan melintang oleh n, 397 00:32:47,110 --> 00:32:50,490 serta menghulurkan menegak oleh n. 398 00:32:50,490 --> 00:32:52,710 Bagaimana kita mungkin melakukan ini? 399 00:32:52,710 --> 00:32:56,890 Katakanlah n anda ialah 2 dan anda mempunyai ini infile diberikan. 400 00:32:56,890 --> 00:32:58,730 Kursor anda akan bermula pada yang pertama, 401 00:32:58,730 --> 00:33:03,530 dan apa yang anda mahu lakukan jika n ialah 2, anda mahu untuk mencetak dalam 2 daripada mereka. 402 00:33:03,530 --> 00:33:05,490 Jadi anda mencetak dalam 2 daripada mereka. 403 00:33:05,490 --> 00:33:10,830 Kemudian kursor anda akan bergerak ke piksel yang seterusnya, yang merupakan satu merah, 404 00:33:10,830 --> 00:33:18,400 dan ia akan mencetak 2 orang-orang yang merah, appending ke apa ia dilakukan sebelum. 405 00:33:18,400 --> 00:33:26,280 Kemudian kursor akan bergerak ke piksel yang seterusnya dan menarik dalam 2 daripada mereka. 406 00:33:26,280 --> 00:33:37,180 Jika anda melihat kembali kepada rangka kerja copy.c, apakah ini tidak betul di sini 407 00:33:37,180 --> 00:33:42,830 ia mewujudkan contoh baru triple RGB, pembolehubah baru yang dipanggil triple. 408 00:33:42,830 --> 00:33:50,500 Dan di sini apabila ia berbunyi ke dalamnya, ia membaca dari infile 1 RGBTRIPLE 409 00:33:50,500 --> 00:33:53,470 dan menyimpan ia di dalam pembolehubah yang triple. 410 00:33:53,470 --> 00:33:57,590 Jadi maka anda sebenarnya mempunyai pembolehubah yang mewakili bahawa piksel tertentu. 411 00:33:57,590 --> 00:34:05,290 Kemudian apabila anda menulis, apa yang anda mungkin mahu lakukan adalah menyarungi penyata fwrite ke dalam untuk gelung 412 00:34:05,290 --> 00:34:11,080 yang menulis ke outfile anda sebagai banyak kali seperti yang diperlukan. 413 00:34:17,449 --> 00:34:20,100 Itu cukup mudah. 414 00:34:20,200 --> 00:34:27,590 Hanya pada dasarnya mengulangi proses penulisan n beberapa kali untuk skala ia melintang. 415 00:34:27,590 --> 00:34:32,969 >> Tetapi kita perlu ingat bahawa padding kami akan berubah. 416 00:34:47,350 --> 00:34:53,020 Sebelum ini, mengatakan kita mempunyai sesuatu yang panjang 3. 417 00:34:53,020 --> 00:35:00,130 Kemudian kita hanya akan menambah dalam berapa banyak padding? Hanya satu lagi untuk membuat ia gandaan 4. 418 00:35:00,130 --> 00:35:10,480 Tetapi mengatakan bahawa kita sedang mendaki imej ini tertentu dengan n = 2. 419 00:35:10,480 --> 00:35:16,300 Demikian maka berapa banyak piksel biru kita akan mempunyai pada akhir? Kita akan mempunyai 6. 420 00:35:16,300 --> 00:35:21,470 1, 2, 3, 4, 5, 6. Semua hak. 421 00:35:21,470 --> 00:35:26,580 6 tidak gandaan 4. Apakah gandaan terdekat daripada 4? Itu akan menjadi 8. 422 00:35:26,580 --> 00:35:33,200 Jadi, kita sebenarnya akan mempunyai 2 watak-watak padding di sana. 423 00:35:33,200 --> 00:35:38,720 >> Adakah sesiapa ingat jika kita mempunyai formula untuk mengira padding 424 00:35:38,720 --> 00:35:41,350 dan di mana yang mungkin? 425 00:35:41,350 --> 00:35:45,160 [Sambutan pelajar didengar] >> Ya, copy.c. Betul. 426 00:35:45,160 --> 00:35:49,800 Terdapat formula di copy.c untuk mengira berapa banyak padding anda mempunyai 427 00:35:49,800 --> 00:35:53,810 diberi lebar tertentu imej bitmap. 428 00:35:53,810 --> 00:36:02,950 Demikian maka itu akan menjadi berguna apabila anda perlu untuk menambah jumlah tertentu padding 429 00:36:02,950 --> 00:36:06,160 sebenarnya memikirkan berapa banyak padding yang anda perlu menambah. 430 00:36:10,820 --> 00:36:15,850 Tetapi satu nota, walaupun, adalah bahawa anda ingin memastikan bahawa anda menggunakan saiz yang betul. 431 00:36:15,850 --> 00:36:21,410 Hanya berhati-hati kerana anda pada dasarnya akan berurusan dengan dua imej bitmap. 432 00:36:21,410 --> 00:36:23,410 Anda ingin memastikan bahawa anda menggunakan yang betul. 433 00:36:23,410 --> 00:36:26,820 Apabila anda mengira padding untuk outfile, anda mahu menggunakan lebar daripada outfile 434 00:36:26,820 --> 00:36:29,860 dan tidak lebar yang sebelumnya. 435 00:36:29,860 --> 00:36:37,240 >> Besar. Yang jenis mengambil menjaga regangan keseluruhan imej bitmap melintang. 436 00:36:37,240 --> 00:36:41,290 Tetapi apa yang kita mahu lakukan sebenarnya menghulurkan menegak serta. 437 00:36:41,290 --> 00:36:48,760 Ini akan menjadi sedikit sukar kerana apabila kita telah selesai menyalin berturut-turut 438 00:36:48,760 --> 00:36:51,580 dan menulis baris tersebut, kursor kita akan menjadi pada akhir. 439 00:36:51,580 --> 00:36:56,210 Jadi, jika kita membaca sekali lagi, maka ia hanya akan membaca dalam ke baris seterusnya. 440 00:36:56,210 --> 00:37:03,660 Jadi apa yang kita mahu lakukan adalah jenis mencari beberapa cara menyalin mereka baris lagi 441 00:37:03,660 --> 00:37:12,500 atau hanya jenis mengambil baris tersebut dan kemudian menulis semula lagi. 442 00:37:14,380 --> 00:37:17,940 Seperti yang saya jenis dirujuk kepada, terdapat beberapa cara yang berbeza untuk melakukan ini. 443 00:37:17,940 --> 00:37:23,040 Apa yang anda boleh lakukan adalah seperti anda pergi melalui dan membaca melalui scanline tertentu 444 00:37:23,040 --> 00:37:28,560 dan berubah ia seperti yang diperlukan, maka jenis kedai semua orang-orang piksel dalam array. 445 00:37:28,560 --> 00:37:36,350 Kemudian kemudian anda tahu bahawa anda akan perlu untuk mencetak pelbagai itu lagi, 446 00:37:36,350 --> 00:37:39,830 dan supaya anda hanya boleh menggunakan pelbagai bahawa untuk berbuat demikian. 447 00:37:39,830 --> 00:37:44,500 Satu lagi cara untuk melakukannya adalah anda boleh tulis satu barisan, 448 00:37:44,500 --> 00:37:47,950 memahami bahawa anda perlu untuk menyalin bahawa sekali lagi, jadi sebenarnya menggerakkan kursor anda, 449 00:37:47,950 --> 00:37:50,950 dan itu akan menggunakan kaedah fseek. 450 00:37:50,950 --> 00:37:56,410 Anda boleh menggerakkan kursor anda sepanjang jalan ke belakang dan kemudian mengulangi proses salinan lagi. 451 00:37:56,410 --> 00:38:03,960 >> Jadi jika nombor bersisik kami adalah n, maka berapa kali kita akan perlu kembali 452 00:38:03,960 --> 00:38:10,500 dan menulis semula garis? >> [Pelajar] n - 1. >> Yeah, sempurna. n - 1. 453 00:38:10,500 --> 00:38:14,390 Kami telah melakukannya sekali pun, maka kita akan mahu mengulangi kembali proses yang berterusan 454 00:38:14,390 --> 00:38:17,460 n - 1 jumlah kali. 455 00:38:22,730 --> 00:38:25,860 Okay. Jadi ada anda mempunyai fungsi saiz semula anda. 456 00:38:25,860 --> 00:38:34,360 >> Sekarang kita boleh sampai ke bahagian yang benar-benar menyeronokkan, pset kegemaran saya, yang merupakan pulihkan. 457 00:38:34,360 --> 00:38:39,580 Sebaliknya bitmap, masa ini kita sedang berurusan dengan JPEG. 458 00:38:39,580 --> 00:38:43,370 Kami sebenarnya tidak diberi fail hanya JPEG, 459 00:38:43,370 --> 00:38:46,600 kita diberi pada dasarnya kad memori format mentah. 460 00:38:46,600 --> 00:38:51,790 Dan sebagainya ini mengandungi sedikit info dan nilai-nilai sampah pada mulanya, 461 00:38:51,790 --> 00:38:57,240 dan kemudian ia bermula dan ia mempunyai sekumpulan fail JPEG. 462 00:38:57,240 --> 00:39:03,430 Walau bagaimanapun, kami menyerahkan kad di mana kita telah dipadam gambar; 463 00:39:03,430 --> 00:39:08,300 pada asasnya, kita terlupa mana gambar yang terletak di dalam kad. 464 00:39:08,300 --> 00:39:12,770 Jadi maka tugas kita di pulihkan adalah untuk pergi melalui format kad ini 465 00:39:12,770 --> 00:39:16,500 dan mencari orang-orang gambar lagi. 466 00:39:16,500 --> 00:39:23,990 >> Nasib baik, struktur fail JPEG dan fail kad adalah sedikit membantu. 467 00:39:23,990 --> 00:39:28,850 Ia pasti boleh menjadi agak sukar jika ia tidak berada dalam format ini tertentu. 468 00:39:28,850 --> 00:39:40,160 Setiap fail JPEG sebenarnya bermula dengan dua jujukan mungkin, yang disenaraikan di atas. 469 00:39:40,160 --> 00:39:42,970 Pada asasnya, apabila anda mempunyai fail JPEG baru, 470 00:39:42,970 --> 00:39:52,720 ia bermula dengan sama ada urutan ffd8 ffe0 atau satu lagi, ffd8 ffe1. 471 00:39:52,720 --> 00:39:59,530 Satu lagi perkara yang membantu untuk mengetahui adalah JPEG disimpan contiguously. 472 00:39:59,530 --> 00:40:03,380 Jadi, apabila salah satu fail JPEG berakhir, satu lagi bermula. 473 00:40:03,380 --> 00:40:07,070 Jadi tidak ada apa-apa jenis di antara nilai sana. 474 00:40:07,070 --> 00:40:15,510 Sebaik sahaja anda memukul permulaan JPEG, jika anda sudah membaca JPEG, 475 00:40:15,510 --> 00:40:21,800 anda tahu bahawa anda telah melanda akhir yang sebelumnya dan permulaan yang seterusnya. 476 00:40:21,800 --> 00:40:25,890 >> Untuk jenis menggambarkan ini, saya membuat skematik. 477 00:40:25,890 --> 00:40:36,910 Satu lagi perkara mengenai JPEG adalah bahawa kita boleh membaca mereka di urutan 512 bait pada satu masa, 478 00:40:36,910 --> 00:40:39,380 begitu juga dengan permulaan kad. 479 00:40:39,380 --> 00:40:43,370 Kita tidak perlu untuk memeriksa setiap bait tunggal kerana itu akan menghisap. 480 00:40:43,370 --> 00:40:48,200 Jadi sebaliknya, apa yang boleh kita lakukan adalah sebenarnya hanya membaca dalam 512 bait pada satu masa 481 00:40:48,200 --> 00:40:54,700 dan kemudian, bukannya memeriksa di antara mereka dalam orang-orang keping kecil sedikit, 482 00:40:54,700 --> 00:40:58,640 kita hanya boleh memeriksa permulaan 512 bait. 483 00:40:58,640 --> 00:41:02,570 Pada asasnya, dalam gambar ini, apa yang anda lihat adalah dalam permulaan kad, 484 00:41:02,570 --> 00:41:08,700 anda mempunyai nilai-nilai yang tidak benar-benar relevan kepada JPEG sebenar diri mereka sendiri. 485 00:41:08,700 --> 00:41:15,830 Tetapi kemudian apa yang saya ada adalah bintang untuk menunjukkan salah satu daripada dua urutan bermula untuk JPEG. 486 00:41:15,830 --> 00:41:19,910 Jadi, apabila anda melihat bintang, anda tahu bahawa anda mempunyai fail JPEG. 487 00:41:19,910 --> 00:41:25,030 Dan kemudian setiap fail JPEG akan menjadi beberapa gandaan 512 bait 488 00:41:25,030 --> 00:41:27,880 tetapi tidak semestinya gandaan yang sama. 489 00:41:27,880 --> 00:41:32,050 Cara yang anda tahu bahawa anda telah melanda satu lagi JPEG adalah jika anda memukul bintang lain, 490 00:41:32,050 --> 00:41:39,090 satu lagi urutan bermula bait. 491 00:41:39,090 --> 00:41:43,330 Kemudian apa yang anda ada di sini adalah anda mempunyai fail merah JPEG berterusan sehingga anda menekan bintang, 492 00:41:43,330 --> 00:41:45,150 yang ditunjukkan oleh warna baru. 493 00:41:45,150 --> 00:41:48,510 Anda terus dan maka anda memukul bintang lain, anda memukul lagi JPEG, 494 00:41:48,510 --> 00:41:50,590 anda terus sepanjang jalan sehingga akhir. 495 00:41:50,590 --> 00:41:53,180 Anda berada di gambar terakhir di sini, satu merah jambu. 496 00:41:53,180 --> 00:41:58,220 Anda pergi ke akhir sehingga anda memukul akhir watak fail. 497 00:41:58,220 --> 00:42:00,820 Ini akan menjadi benar-benar berguna. 498 00:42:00,820 --> 00:42:03,170 >> A takeaways beberapa utama di sini: 499 00:42:03,170 --> 00:42:06,670 Fail kad tidak bermula dengan JPEG, 500 00:42:06,670 --> 00:42:13,350 tetapi sekali JPEG bermula, semua yang JPEG disimpan sebelah menyebelah untuk satu sama lain. 501 00:42:17,520 --> 00:42:20,420 >> Sesetengah pseudokod untuk pulihkan. 502 00:42:20,420 --> 00:42:22,570 Pertama, kita pergi untuk membuka fail kad kami, 503 00:42:22,570 --> 00:42:27,500 dan itu akan menggunakan fail I / O fungsi kami. 504 00:42:27,500 --> 00:42:32,430 Kami akan mengulangi proses berikut sehingga kita telah sampai ke penghujung fail. 505 00:42:32,430 --> 00:42:36,450 Kami akan membaca 512 bait pada satu masa. 506 00:42:36,450 --> 00:42:39,180 Dan apa yang saya katakan di sini adalah kita akan menyimpannya dalam buffer, 507 00:42:39,180 --> 00:42:46,230 jadi pada asasnya berpegang kepada mereka 512 bait sehingga kita tahu apa yang perlu dilakukan dengan mereka. 508 00:42:46,230 --> 00:42:50,300 Kemudian apa yang kita mahu lakukan ialah kita mahu untuk memeriksa sama ada kita telah melanda bintang atau tidak. 509 00:42:50,300 --> 00:42:57,960 Jika kita telah melanda bintang, jika kita telah melanda salah satu urutan bermula, 510 00:42:57,960 --> 00:42:59,980 maka kita tahu bahawa kita telah melanda fail JPEG baru. 511 00:42:59,980 --> 00:43:08,860 Apa yang kita akan mahu lakukan adalah kita akan mahu mencipta fail baru dalam direktori pset4 kami 512 00:43:08,860 --> 00:43:14,480 untuk terus membuat fail tersebut. 513 00:43:14,480 --> 00:43:18,220 Tetapi juga, jika kita sudah dibuat JPEG sebelum ini, 514 00:43:18,220 --> 00:43:25,620 maka kita ingin menamatkan fail tersebut dan menolak ia ke folder pset4, 515 00:43:25,620 --> 00:43:29,780 di mana kita akan mempunyai fail yang disimpan kerana jika kita tidak menyatakan bahawa kita telah berakhir bahawa fail JPEG, 516 00:43:29,780 --> 00:43:37,290 maka kita pada dasarnya akan mempunyai satu jumlah yang tidak dapat ditentukan. JPEG tidak akan berakhir. 517 00:43:37,290 --> 00:43:40,840 Jadi, kita mahu memastikan bahawa apabila kita membaca dalam fail JPEG dan menulis bahawa, 518 00:43:40,840 --> 00:43:46,590 kita mahu khusus untuk menutup bahawa dalam usaha untuk membuka satu seterusnya. 519 00:43:46,590 --> 00:43:48,430 Kami akan mahu untuk memeriksa beberapa perkara. 520 00:43:48,430 --> 00:43:52,880 Kami ingin untuk memeriksa sama ada kita berada di permulaan JPEG baru dengan penampan kami 521 00:43:52,880 --> 00:43:56,780 dan juga jika kita sudah telah menemui JPEG sebelum 522 00:43:56,780 --> 00:44:03,930 kerana yang akan mengubah proses anda sedikit. 523 00:44:03,930 --> 00:44:07,880 Jadi kemudian selepas anda pergi melalui semua cara dan anda melanda akhir fail, 524 00:44:07,880 --> 00:44:11,570 maka apa yang anda akan mahu lakukan adalah anda akan mahu untuk menutup semua fail yang sedang terbuka. 525 00:44:11,570 --> 00:44:14,100 Itu mungkin akan menjadi fail JPEG lepas bahawa anda mempunyai, 526 00:44:14,100 --> 00:44:18,930 serta fail kad yang anda telah berurusan dengan. 527 00:44:21,940 --> 00:44:28,670 >> Halangan terakhir yang kita perlukan untuk menangani adalah bagaimana untuk benar-benar membuat fail JPEG 528 00:44:28,670 --> 00:44:31,950 dan bagaimana untuk benar-benar menolak ke folder. 529 00:44:33,650 --> 00:44:39,850 Pset memerlukan bahawa setiap JPEG yang anda dapati berada dalam format berikut, 530 00:44:39,850 --> 00:44:43,990 di mana anda mempunyai nombor jpg. 531 00:44:43,990 --> 00:44:50,750 Nombor, walaupun ia adalah 0, kita panggil ia 000.jpg. 532 00:44:50,750 --> 00:44:55,730 Apabila anda mencari JPEG dalam program anda, 533 00:44:55,730 --> 00:44:58,040 anda akan mahu untuk menamakan ia dalam perintah itu bahawa ia dijumpai. 534 00:44:58,040 --> 00:44:59,700 Apa maknanya? 535 00:44:59,700 --> 00:45:03,530 Kita perlu jenis menjejaki berapa banyak kita dapati 536 00:45:03,530 --> 00:45:08,680 dan apa bilangan setiap JPEG sepatutnya. 537 00:45:08,680 --> 00:45:13,800 Di sini kita pergi untuk mengambil kesempatan daripada fungsi sprintf. 538 00:45:13,800 --> 00:45:17,480 Sama seperti printf, yang hanya jenis cetakan nilai keluar ke terminal, 539 00:45:17,480 --> 00:45:23,910 sprintf mencetak fail ke dalam folder. 540 00:45:23,910 --> 00:45:30,870 Dan jadi apa ini akan lakukan sekiranya saya mempunyai sprintf, tajuk, dan kemudian rentetan di sana, 541 00:45:30,870 --> 00:45:36,660 ia akan mencetak 2.jpg. 542 00:45:36,660 --> 00:45:41,020 Mengandaikan bahawa saya telah ditutup fail-fail saya dengan betul, 543 00:45:41,020 --> 00:45:47,210 yang akan mengandungi fail bahawa saya telah menulis. 544 00:45:47,210 --> 00:45:50,320 Tetapi satu perkara yang bahawa kod yang saya ada di sini 545 00:45:50,320 --> 00:45:53,360 tidak cukup memenuhi apa pset memerlukan. 546 00:45:53,360 --> 00:46:02,410 Pset memerlukan bahawa fail JPEG kedua harus dinamakan 002 bukannya hanya 2. 547 00:46:02,410 --> 00:46:09,160 Jadi, apabila anda mencetak nama, maka mungkin anda mungkin mahu untuk mengubah placeholder sedikit. 548 00:46:09,160 --> 00:46:18,140 >> Adakah sesiapa masih ingat bagaimana kita membolehkan untuk ruang tambahan apabila kita mencetak sesuatu? 549 00:46:18,140 --> 00:46:22,530 Yeah. >> [Pelajar] Anda meletakkan 3 antara tanda peratus dan 2. >> Yeah, sempurna. 550 00:46:22,530 --> 00:46:25,610 Anda akan meletakkan 3 dalam kes ini kerana kita mahu ruang untuk 3. 551 00:46:25,610 --> 00:46:32,590 3d% mungkin akan memberikan anda 002.jpg bukannya 2. 552 00:46:32,590 --> 00:46:40,120 Hujah pertama ke fungsi sprintf adalah sebenarnya pelbagai char, 553 00:46:40,120 --> 00:46:42,520 yang kita pernah tahu sebagai rentetan. 554 00:46:42,520 --> 00:46:50,700 Mereka wasiat, jenis lebih seperti penyimpanan sementara, hanya menyimpan rentetan yang terhasil. 555 00:46:50,700 --> 00:46:54,950 Anda tidak akan benar-benar akan berurusan dengan ini, tetapi anda perlu untuk memasukkan. 556 00:46:54,950 --> 00:47:00,710 >> Mengetahui bahawa setiap nama fail mempunyai bilangan, yang mengambil masa sehingga tiga watak, 557 00:47:00,710 --> 00:47:06,770 dan kemudian. jpg, berapa lama pelbagai ini perlu? 558 00:47:09,070 --> 00:47:14,310 Membuang nombor. Berapa banyak watak-watak dalam tajuk, dalam nama? 559 00:47:18,090 --> 00:47:26,320 Jadi ada 3 hashtags, tempoh, jpg. >> [Pelajar] 7. >> 7. Tidak cukup. 560 00:47:26,320 --> 00:47:32,000 Kami akan mahu 8 kerana kita mahu untuk membolehkan null serta. 561 00:47:45,340 --> 00:47:49,730 >> Akhirnya, hanya untuk menarik keluar proses yang anda akan lakukan untuk pulihkan, 562 00:47:49,730 --> 00:47:55,420 anda mempunyai beberapa maklumat awal. 563 00:47:55,420 --> 00:48:02,460 Anda terus sehingga anda menjumpai permulaan fail JPEG, 564 00:48:02,460 --> 00:48:07,900 dan yang boleh menjadi salah satu daripada dua urutan bermula. 565 00:48:07,900 --> 00:48:12,510 Anda terus membaca. Setiap slash di sini mewakili 512 bait. 566 00:48:12,510 --> 00:48:22,630 Anda terus membaca, terus membaca sehingga anda bertemu dengan satu lagi urutan permulaan. 567 00:48:22,630 --> 00:48:29,790 Sebaik sahaja anda mempunyai, anda berakhir JPEG semasa - dalam kes ini, ia adalah satu merah, 568 00:48:29,790 --> 00:48:31,030 jadi anda mahu menamatkan bahawa. 569 00:48:31,030 --> 00:48:35,540 Anda mahu sprintf nama itu ke dalam folder pset4 anda, 570 00:48:35,540 --> 00:48:41,580 maka anda ingin membuka JPEG baru dan kemudian terus membaca 571 00:48:41,580 --> 00:48:46,370 sehingga anda menghadapi seterusnya. 572 00:48:46,370 --> 00:48:49,040 Teruskan membaca, menyimpan membaca, 573 00:48:49,040 --> 00:48:56,290 dan akhirnya, akhirnya, anda akan sampai ke akhir fail, 574 00:48:56,290 --> 00:49:00,360 dan supaya anda akan mahu untuk menutup JPEG terakhir yang anda telah bekerja dengan, 575 00:49:00,360 --> 00:49:08,380 sprintf bahawa ke dalam folder pset4 anda, dan kemudian melihat semua gambar-gambar yang anda telah mendapat. 576 00:49:08,380 --> 00:49:12,050 Mereka gambar sebenarnya gambar CS50 kakitangan, 577 00:49:12,050 --> 00:49:16,430 dan sebagainya ini adalah di mana bahagian bonus keseronokan pset yang datang dalam 578 00:49:16,430 --> 00:49:26,310 adalah bahawa anda bersaing dalam seksyen anda untuk mencari TFS dalam gambar 579 00:49:26,310 --> 00:49:34,610 dan mengambil gambar dengan mereka untuk membuktikan bahawa anda telah melakukan pset 580 00:49:34,610 --> 00:49:37,030 dan supaya anda boleh melihat yang staf dalam gambar. 581 00:49:37,030 --> 00:49:41,510 Jadi maka anda mengambil gambar dengan kakitangan. Kadang-kadang anda akan mempunyai untuk mengejar mereka ke bawah. 582 00:49:41,510 --> 00:49:44,680 Mungkin sesetengah daripada mereka akan cuba untuk melarikan diri dari anda. 583 00:49:44,680 --> 00:49:47,320 Anda mengambil gambar dengan mereka. 584 00:49:47,320 --> 00:49:51,190 Ini adalah berterusan. Ia bukan disebabkan apabila pset adalah disebabkan. 585 00:49:51,190 --> 00:49:53,340 Tarikh tutup akan diumumkan dalam spesifikasi. 586 00:49:53,340 --> 00:49:58,060 Kemudian bersama-sama dengan bahagian anda, mana-mana seksyen mengambil gambar-gambar yang paling 587 00:49:58,060 --> 00:50:04,430 dengan kakitangan yang paling akan memenangi hadiah yang cukup menggerunkan. 588 00:50:04,430 --> 00:50:08,890 Itulah jenis insentif untuk mendapatkan pset4 anda selesai secepat mungkin 589 00:50:08,890 --> 00:50:10,820 kerana maka anda boleh pergi ke perniagaan 590 00:50:10,820 --> 00:50:14,570 memburu semua kakitangan yang berbeza ahli CS50. 591 00:50:14,570 --> 00:50:17,500 Itu bukan wajib, walaupun, jadi apabila anda mendapatkan gambar, 592 00:50:17,500 --> 00:50:20,310 maka anda selesai dengan pset4. 593 00:50:20,310 --> 00:50:23,970 >> Dan saya selesai dengan 4 Walkthrough, jadi terima kasih semua kerana datang. 594 00:50:23,970 --> 00:50:29,330 Nasib baik dengan Forensik. [Tepukan] 595 00:50:29,330 --> 00:50:31,000 [CS50.TV]