1 00:00:00,000 --> 00:00:12,240 >> [MUSIC PLAYING] 2 00:00:12,240 --> 00:00:15,870 >> ROB Bowden: Hi, saya Rob, mari kita coba ini untuk ukuran. 3 00:00:15,870 --> 00:00:21,100 Jadi, kita lagi akan mulai dengan pada dasarnya salinan copy.c, dan 4 00:00:21,100 --> 00:00:22,860 membuat beberapa perubahan. 5 00:00:22,860 --> 00:00:26,280 Catatan segera kita melihat perubahan, di mana bukannya memeriksa untuk melihat apakah 6 00:00:26,280 --> 00:00:30,440 argc tidak sama 3, kita ingin memeriksa jika argc tidak sama dengan 4, karena 7 00:00:30,440 --> 00:00:34,350 sekarang kita tidak hanya mengambil dalam INFILE dan outfile, tapi kita juga mengambil dalam 8 00:00:34,350 --> 00:00:38,980 n, yang merupakan jumlah yang kita skala gambar asli oleh. 9 00:00:38,980 --> 00:00:44,340 Setelah kita yakin akan hal itu, kami hanya bisa mengkonversi n ke integer menggunakan atoi. 10 00:00:44,340 --> 00:00:48,760 >> Jadi, sekarang kita akan membuat beberapa alias, hanya panggilan argv 2 INFILE, dan 11 00:00:48,760 --> 00:00:54,240 argv 3 outfile, karena argv 2 dan argv 3 tidak nama yang sangat membantu. 12 00:00:54,240 --> 00:00:58,510 Sekarang kita ingin memeriksa untuk memastikan n adalah dalam batas-batas yang kita harapkan, sehingga 13 00:00:58,510 --> 00:01:02,910 spesifikasi menetapkan bahwa jika kurang dari atau sama dengan nol, atau lebih besar dari 100, 14 00:01:02,910 --> 00:01:08,580 maka itulah faktor resize valid, dan kita harus memperingatkan pengguna itu. 15 00:01:08,580 --> 00:01:13,090 >> Begitu kita di luar semua itu, kita bisa akhirnya membuka INFILE kita, dan kita perlu 16 00:01:13,090 --> 00:01:16,270 kesalahan memeriksa untuk memastikan bahwa pembukaan tidak gagal untuk beberapa alasan. 17 00:01:16,270 --> 00:01:19,860 Kita juga perlu membuka outfile kami, dan lagi kesalahan periksa untuk memastikan bahwa 18 00:01:19,860 --> 00:01:21,250 tidak gagal untuk beberapa alasan. 19 00:01:21,250 --> 00:01:26,270 Tetapi pastikan jika pembukaan outfile gagal bahwa kita harus menutup 20 00:01:26,270 --> 00:01:29,040 yang INFILE, yang sudah dibuka. 21 00:01:29,040 --> 00:01:33,690 >> Jadi, dengan asumsi bahwa tidak gagal, maka kami sedang - seperti dalam copy.c-- 22 00:01:33,690 --> 00:01:36,140 akan membaca di header dari INFILE tersebut. 23 00:01:36,140 --> 00:01:40,130 Kita akan memastikan itu valid bitmap, tapi sekarang kita akan melakukan beberapa 24 00:01:40,130 --> 00:01:41,620 hal-hal sedikit berbeda. 25 00:01:41,620 --> 00:01:44,870 Jadi pertama, kita akan ingin ingat lebar asli dan tinggi 26 00:01:44,870 --> 00:01:48,290 dari INFILE, karena kita akan berubah untuk outfile tersebut. 27 00:01:48,290 --> 00:01:53,890 Jadi sekarang ingat bahwa untuk alasan yang aneh bi.biheight, negatif, dan 28 00:01:53,890 --> 00:01:58,670 jadi tinggi sebenarnya, dalam positif, kita ingin mengambil nilai absolut. 29 00:01:58,670 --> 00:02:02,580 >> Sekarang, padding akan menjadi sama perhitungan seperti di copy.c, 30 00:02:02,580 --> 00:02:06,060 menggunakan lebar lama, dan sekarang kita benar-benar akan mengubah 31 00:02:06,060 --> 00:02:07,320 apa di kepala kami. 32 00:02:07,320 --> 00:02:11,200 Jadi kita akan kalikan lebar kami dengan n, karena kita sedang skala lebar oleh 33 00:02:11,200 --> 00:02:15,100 n, kalikan tinggi dengan n, karena kita scaling dengan n, dan sekarang kami memiliki 34 00:02:15,100 --> 00:02:19,250 perhitungan untuk padding baru berdasarkan lebar baru. 35 00:02:19,250 --> 00:02:21,840 >> Jadi sekarang kita perlu mengubah beberapa bidang lain dalam header kita. 36 00:02:21,840 --> 00:02:26,890 Bi.biSizeImage seharusnya menjadi ukuran semua byte dalam pixel 37 00:02:26,890 --> 00:02:28,520 dan padding gambar. 38 00:02:28,520 --> 00:02:34,190 Dan ukuran satu baris kami gambar ukuran RGB tiga, ukuran 39 00:02:34,190 --> 00:02:39,430 dari satu piksel, kali jumlah piksel berturut-turut, ditambah padding di 40 00:02:39,430 --> 00:02:40,910 akhir baris. 41 00:02:40,910 --> 00:02:45,200 Dan kemudian kita akan kalikan dengan nilai absolut tinggi kami untuk mendapatkan 42 00:02:45,200 --> 00:02:48,350 jumlah byte dalam data gambar. 43 00:02:48,350 --> 00:02:53,050 bf.bfSize hanya jumlah dari byte di data citra kami, jadi 44 00:02:53,050 --> 00:02:56,530 bi.biSizeImage, ditambah ukuran header kita. 45 00:02:56,530 --> 00:02:59,850 Jadi, menambahkan pada ukuran file bitmap header, dan ukuran info bitmap 46 00:02:59,850 --> 00:03:00,800 header, OK. 47 00:03:00,800 --> 00:03:03,170 Jadi itu yang kita perlu perubahan header kita. 48 00:03:03,170 --> 00:03:07,020 Sekarang kita akan menulis header file bitmap untuk outfile kami, dan info bitmap kami 49 00:03:07,020 --> 00:03:09,880 sundulan ke outfile kami, dan sekarang kita siap untuk mulai terjadi 50 00:03:09,880 --> 00:03:11,990 atas piksel sebenarnya. 51 00:03:11,990 --> 00:03:15,720 >> Jadi kami ingin iterate atas garis scan infile itu. 52 00:03:15,720 --> 00:03:17,730 Jadi kami ingin iterate atas oldheight. 53 00:03:17,730 --> 00:03:20,830 Inilah sebabnya mengapa kita perlu mengingat ketinggian aslinya, sebelum kita mengubahnya 54 00:03:20,830 --> 00:03:23,040 dan skala dengan n. 55 00:03:23,040 --> 00:03:27,810 Sekarang kita akan membaca satu deretan INFILE ke dalam 56 00:03:27,810 --> 00:03:30,630 penyangga ukuran oldwidth. 57 00:03:30,630 --> 00:03:36,190 Jadi di sini, kita freading ukuran RGB tiga, satu piksel, dan lebar lama 58 00:03:36,190 --> 00:03:39,760 mereka dari infile ke dalam buffer kita. 59 00:03:39,760 --> 00:03:43,480 Dan itu akan menjadi seluruh baris dalam array ini. 60 00:03:43,480 --> 00:03:50,390 Jadi sekarang, kami ingin beralih n kali untuk mencetak baris ini untuk outfile n zaman kita. 61 00:03:50,390 --> 00:03:52,510 Dan itulah apa lingkaran ini lakukan. 62 00:03:52,510 --> 00:03:57,910 Loop batin ini iterasi baris sendiri, atas array, pencetakan 63 00:03:57,910 --> 00:04:00,710 setiap pixel dalam array n kali. 64 00:04:00,710 --> 00:04:04,510 Jadi unsur zeroth sedang dicetak n kali, elemen pertama sedang 65 00:04:04,510 --> 00:04:05,660 dicetak n kali. 66 00:04:05,660 --> 00:04:10,820 Dan itu semacam bagaimana kita akan horizontal skala dalam outfile, dan 67 00:04:10,820 --> 00:04:13,390 lingkaran ini, karena kita sedang perulangan n kali, adalah bagaimana kita akan 68 00:04:13,390 --> 00:04:15,580 skala vertikal. 69 00:04:15,580 --> 00:04:19,850 >> Di sini, kita melihat bahwa kita perlu menambahkan padding pada akhir setiap baris. 70 00:04:19,850 --> 00:04:25,050 Itulah mengapa hal ini di dalam untuk loop yang mencetak baris n hanya 71 00:04:25,050 --> 00:04:28,400 ini satu baris dari infile tersebut. 72 00:04:28,400 --> 00:04:32,150 Kemudian di sini, aku akan melewatkan padding di INFILE, karena sekali 73 00:04:32,150 --> 00:04:34,560 kita sudah selesai dengan satu baris dari INFILE, kita tidak peduli tentang 74 00:04:34,560 --> 00:04:35,290 apa padding itu. 75 00:04:35,290 --> 00:04:37,110 Kami hanya ingin mendapatkan baris kedua. 76 00:04:37,110 --> 00:04:40,870 Dan kemudian kita akan loop kembali dan melakukan semua ini lagi untuk baris kedua. 77 00:04:40,870 --> 00:04:44,406 >> Akhirnya, setelah kami selesai dengan semua itu, kita dapat menutup INFILE, dekat 78 00:04:44,406 --> 00:04:47,430 yang outfile, dan kembali 0 karena kita sudah selesai. 79 00:04:47,430 --> 00:04:50,330 >> Nama saya Rob, dan ini adalah resize. 80 00:04:50,330 --> 00:04:54,934 >> [MUSIC PLAYING]