1 00:00:00,000 --> 00:00:00,996 2 00:00:00,996 --> 00:00:12,470 >> [MUSIC PLAYING] 3 00:00:12,470 --> 00:00:13,210 >> ROB Bowden: Hi. 4 00:00:13,210 --> 00:00:16,870 Aku Rob dan biarkan ukuran ini up masalah ini. 5 00:00:16,870 --> 00:00:20,990 Jadi kita akan mulai dengan copy.c sebagai template, tapi kami akan menjadi 6 00:00:20,990 --> 00:00:23,340 membuat beberapa perubahan. 7 00:00:23,340 --> 00:00:27,570 >> Sekarang kita melihat kita segera membuat mengubah di mana kita tidak lagi memeriksa 8 00:00:27,570 --> 00:00:31,560 untuk rxc kami tidak sama dengan 3, tapi sekarang kita memeriksa rc tidak sama 4. 9 00:00:31,560 --> 00:00:34,670 Karena kita juga ingin memasukkan, dalam Selain dalam file dan file yang 10 00:00:34,670 --> 00:00:39,550 argumen, f yang akan menjadi ini faktor dengan yang kita skala. 11 00:00:39,550 --> 00:00:45,430 >> Jadi sekali kita yakin akan hal itu, kami ingin menggunakan s memindai f untuk mengkonversi string 12 00:00:45,430 --> 00:00:49,030 argv1 ke float. 13 00:00:49,030 --> 00:00:51,330 Dan kita akan menyimpan bahwa dalam faktor. 14 00:00:51,330 --> 00:00:55,180 Karakter tambahan ini adalah memastikan bahwa kita tidak benar-benar masuk 15 00:00:55,180 --> 00:00:59,200 sesuatu seperti 1.4 ABC pada baris perintah. 16 00:00:59,200 --> 00:01:02,960 >> Sekarang kita akan membuat beberapa alias sejak RV2 dan RV3 tidak 17 00:01:02,960 --> 00:01:04,310 nama yang sangat membantu. 18 00:01:04,310 --> 00:01:07,660 Kita, sebagai gantinya, akan menelepon mereka dalam file dan keluar berkas. 19 00:01:07,660 --> 00:01:11,580 Sekarang kita akan memastikan bahwa Faktor kami benar-benar valid. 20 00:01:11,580 --> 00:01:16,330 Jadi, jika faktor kurang dari atau sama dengan nol atau lebih besar dari 100, maka sesuai 21 00:01:16,330 --> 00:01:19,660 spec, kita harus menolak Faktor itu. 22 00:01:19,660 --> 00:01:23,890 >> Ketika kami yakin itu baik, sekarang kita bisa buka file n, dan kita harus membuat 23 00:01:23,890 --> 00:01:25,950 yakin bahwa itu berhasil dibuka. 24 00:01:25,950 --> 00:01:28,630 Jika tidak, itu akan mengembalikan null. 25 00:01:28,630 --> 00:01:30,390 Kita akan membuka berkas keluar. 26 00:01:30,390 --> 00:01:33,420 Dan lagi, kita ingin memeriksa untuk membuat yakin itu berhasil dibuka. 27 00:01:33,420 --> 00:01:37,270 Dan jika itu tidak berhasil dibuka, maka kami juga harus yakin untuk menutup 28 00:01:37,270 --> 00:01:40,870 file n yang awalnya berhasil dibuka, atau kita memiliki 29 00:01:40,870 --> 00:01:42,600 kebocoran memori. 30 00:01:42,600 --> 00:01:46,350 >> Jadi sekarang kita akan membaca bitmap file header dan info bitmap 31 00:01:46,350 --> 00:01:48,890 sundulan dari file n. 32 00:01:48,890 --> 00:01:52,360 Kita akan memastikan bahwa n berkas adalah bitmap valid. 33 00:01:52,360 --> 00:01:52,640 OK. 34 00:01:52,640 --> 00:01:55,100 >> Jadi sekarang kita akan mulai membuat beberapa perubahan. 35 00:01:55,100 --> 00:01:58,840 Jadi karena kita akan berubah hal, pertama kita ingin mengingat 36 00:01:58,840 --> 00:02:01,510 lebar lama file n. 37 00:02:01,510 --> 00:02:05,160 Kami ingin mengingat padding lama file n menggunakan perhitungan yang sama 38 00:02:05,160 --> 00:02:06,990 dari copy.c. 39 00:02:06,990 --> 00:02:09,840 >> Dan sekarang kita akan mengubah info bitmap sundulan. 40 00:02:09,840 --> 00:02:13,630 Dan jadi kita mengalikan kedua lebar dan tinggi dengan faktor sejak 41 00:02:13,630 --> 00:02:15,750 itulah yang kita scaling dengan. 42 00:02:15,750 --> 00:02:18,420 Kita akan menentukan bantalan baru dari file dengan 43 00:02:18,420 --> 00:02:21,140 menggunakan lebar baru. 44 00:02:21,140 --> 00:02:27,330 Dan kita akan menentukan baru ukuran gambar menggunakan jumlah 45 00:02:27,330 --> 00:02:31,610 byte dalam satu baris yang akan menjadi jumlah piksel dalam baris yang 46 00:02:31,610 --> 00:02:35,960 kali ukuran pixel ditambah jumlah byte padding di akhir 47 00:02:35,960 --> 00:02:40,310 baris itu, dan mengalikan semua yang dengan jumlah baris yang kita miliki. 48 00:02:40,310 --> 00:02:43,800 Jadi itulah jumlah byte kita miliki dalam data citra kami. 49 00:02:43,800 --> 00:02:48,190 >> Bf.Bfsize sekarang akan menjadi nomor dari byte dalam versi beta image kami ditambah 50 00:02:48,190 --> 00:02:49,350 ukuran header kita. 51 00:02:49,350 --> 00:02:53,910 Jadi ukuran plus file bitmap sundulan dan ukuran info bitmap sundulan. 52 00:02:53,910 --> 00:02:54,510 OK. 53 00:02:54,510 --> 00:02:56,440 Jadi itu saja untuk header kita. 54 00:02:56,440 --> 00:02:59,030 Kita bisa menulis kepala berkas dan Info header untuk keluar 55 00:02:59,030 --> 00:03:01,590 mengajukan, dan kita baik-baik. 56 00:03:01,590 --> 00:03:03,800 >> Sekarang saatnya untuk mulai benar-benar menulis pixel 57 00:03:03,800 --> 00:03:05,120 data ke luar berkas. 58 00:03:05,120 --> 00:03:10,460 Kita akan mendeklarasikan penyangga ukuran tua lebar RGB tiga kali lipat, dan kami 59 00:03:10,460 --> 00:03:13,790 akan mendeklarasikan variabel disebut baris mati rasa, yang kita akan 60 00:03:13,790 --> 00:03:15,640 awalnya ditetapkan sama dengan negatif 1. 61 00:03:15,640 --> 00:03:19,090 Kita akan melihat bahwa kita akan menggunakan bahwa untuk melacak apa 62 00:03:19,090 --> 00:03:22,640 baris saat ini kami telah dimuat ke dalam buffer ini. 63 00:03:22,640 --> 00:03:23,290 OK. 64 00:03:23,290 --> 00:03:28,750 >> Jadi sekarang tidak seperti edisi standar, bukannya iterasi di dalam 65 00:03:28,750 --> 00:03:32,900 berkas, kita akan beralih di atas masing-masing baris dalam berkas keluar dan mencari tahu 66 00:03:32,900 --> 00:03:38,130 yang baris dalam file yang kita ingin tempat di baris ini dalam berkas keluar. 67 00:03:38,130 --> 00:03:44,930 Jadi iterasi semua baris di luar mengajukan menggunakan ketinggian baru, kami pertama 68 00:03:44,930 --> 00:03:48,890 akan menentukan baris dalam lama mengajukan kita akan gunakan, yang kita 69 00:03:48,890 --> 00:03:53,560 akan melakukan dengan mengambil saat ini baris dibagi dengan faktor. 70 00:03:53,560 --> 00:03:58,000 Jadi itu akan memberi kita baris di file lama yang kita inginkan. 71 00:03:58,000 --> 00:04:03,310 >> Jadi sekarang jika baris mati rasa tidak sama dengan y tua, kita akan harus membaca baris 72 00:04:03,310 --> 00:04:05,940 yang kita inginkan ke skr baris penyangga kami. 73 00:04:05,940 --> 00:04:07,700 Jadi bagaimana yang akan kita melakukan itu? 74 00:04:07,700 --> 00:04:11,650 Pertama, kita akan mengetahui Posisi yang dimulai baris yang di 75 00:04:11,650 --> 00:04:13,100 file asli. 76 00:04:13,100 --> 00:04:18,630 Jadi posisi itu akan menjadi melewati semua header dan 77 00:04:18,630 --> 00:04:21,589 tua y baris sekarang masa lalu. 78 00:04:21,589 --> 00:04:23,880 >> Dan berapa banyak byte berada dalam satu baris? 79 00:04:23,880 --> 00:04:28,740 Sekali lagi, ukuran RGB kali tiga tua lebar ditambah bantalan tua, jadi itu 80 00:04:28,740 --> 00:04:30,640 jumlah byte dalam satu baris. 81 00:04:30,640 --> 00:04:33,680 Dan kami ingin melewatkan tua y baris terakhir. 82 00:04:33,680 --> 00:04:37,580 Jadi kita akan mencari f dan kami menggunakan mencari set mulai dari 83 00:04:37,580 --> 00:04:39,100 awal file. 84 00:04:39,100 --> 00:04:42,740 Kita akan f berusaha untuk posisi ini dalam file, menempatkan kami di 85 00:04:42,740 --> 00:04:46,500 dimulai dari baris yang kita inginkan membaca ke dalam buffer kita. 86 00:04:46,500 --> 00:04:48,510 >> Kita akan mengatur baris mati rasa sama dengan y tua. 87 00:04:48,510 --> 00:04:53,080 Jadi sekarang jika kita loop kembali dan kami ingin menggunakan baris ini sama dalam file keluar kami, 88 00:04:53,080 --> 00:04:55,970 maka kita tidak akan membaca dalam lagi perlu. 89 00:04:55,970 --> 00:04:59,310 Jadi benar-benar, baris mati rasa adalah hanya optimasi. 90 00:04:59,310 --> 00:05:05,500 >> Akhirnya, kita akan membaca ke dalam baris saat ini lebar RGB tua tiga kali lipat 91 00:05:05,500 --> 00:05:08,040 yang kita inginkan dari file asli. 92 00:05:08,040 --> 00:05:12,270 Jadi sekarang baris skr berisi piksel dari file asli yang kita ingin 93 00:05:12,270 --> 00:05:14,200 menulis ke dalam berkas keluar. 94 00:05:14,200 --> 00:05:18,960 Jadi sekarang, sama seperti di atas, bukan iterasi file lama, kita perlu 95 00:05:18,960 --> 00:05:22,560 untuk iterate atas file baris baru. 96 00:05:22,560 --> 00:05:27,450 Nah di sini, bukannya iterasi semua piksel tua yang berturut-turut skr, 97 00:05:27,450 --> 00:05:31,210 kami ingin iterate atas semua piksel dalam file baru kami dalam hal ini 98 00:05:31,210 --> 00:05:32,480 baris tertentu. 99 00:05:32,480 --> 00:05:34,140 >> Mengapa kita ingin melakukan itu? 100 00:05:34,140 --> 00:05:38,960 Karena kita lihat di sini bahwa kita tidak benar-benar harus menggunakan semua 101 00:05:38,960 --> 00:05:41,020 piksel di file asli. 102 00:05:41,020 --> 00:05:46,630 Karena jika kita menyusut, kita mungkin benar-benar ingin melewatkan piksel. 103 00:05:46,630 --> 00:05:48,090 Dan kita melihat bahwa ini - 104 00:05:48,090 --> 00:05:49,690 x dibagi dengan faktor - 105 00:05:49,690 --> 00:05:55,620 erat cermin di sini di mana kita katakan y dibagi dengan faktor untuk mengetahui bahwa 106 00:05:55,620 --> 00:06:02,480 lama y-th baris sesuai dengan y-th baris dalam file baru ini. 107 00:06:02,480 --> 00:06:05,880 >> Sekarang kita akan menulis semua piksel tersebut dari baris tua 108 00:06:05,880 --> 00:06:07,440 ke baris baru kami. 109 00:06:07,440 --> 00:06:10,890 Setelah kami melakukan itu, kita hanya perlu menempatkan padding pada akhir baris kami 110 00:06:10,890 --> 00:06:15,540 dan kami akan loop kembali dan melanjutkan untuk semua baris dalam file baru. 111 00:06:15,540 --> 00:06:19,390 Pada akhirnya, kita harus menutup lama kita mengajukan, tutup file baru kami, dan kembali 112 00:06:19,390 --> 00:06:21,540 nol karena semuanya berjalan baik-baik saja. 113 00:06:21,540 --> 00:06:24,220 >> Nama saya Rob dan ini adalah Recess. 114 00:06:24,220 --> 00:06:29,184 >> [MUSIC PLAYING]