1 00:00:00,000 --> 00:00:12,240 >> [MUZIK Bermain] 2 00:00:12,240 --> 00:00:15,870 >> ROB Bowden: Hi, saya Rob, mari kita cuba ini selama saiz. 3 00:00:15,870 --> 00:00:21,100 Jadi, kita sekali lagi akan bermula 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 Nota segera kita lihat perubahan, di mana bukannya memeriksa untuk melihat jika 6 00:00:26,280 --> 00:00:30,440 argc tidak sama 3, kita mahu menyemak jika argc tidak sama 4, kerana 7 00:00:30,440 --> 00:00:34,350 sekarang kita tidak hanya mengambil satu infile dan outfile, tetapi kami juga mengambil 8 00:00:34,350 --> 00:00:38,980 n, yang adalah jumlah yang kita menampal imej asal oleh. 9 00:00:38,980 --> 00:00:44,340 Apabila kita pasti itu, kita boleh hanya menukar n kepada integer menggunakan atoi. 10 00:00:44,340 --> 00:00:48,760 >> Jadi, sekarang kita akan membuat beberapa alias, hanya memanggil argv 2 infile, dan 11 00:00:48,760 --> 00:00:54,240 argv 3 outfile, kerana argv 2 dan argv 3 bukan nama sangat membantu. 12 00:00:54,240 --> 00:00:58,510 Sekarang kita mahu memeriksa untuk memastikan n dalam batas-batas yang kita jangkakan, jadi 13 00:00:58,510 --> 00:01:02,910 spec menyatakan bahawa jika ia kurang daripada atau sama dengan sifar atau lebih besar daripada 100, 14 00:01:02,910 --> 00:01:08,580 maka itu faktor saiz semula tidak sah, dan kita harus memberi amaran kepada pengguna itu. 15 00:01:08,580 --> 00:01:13,090 >> Begitu kita di luar semua itu, kita boleh akhirnya membuka infile kita, dan kita perlu 16 00:01:13,090 --> 00:01:16,270 untuk kesilapan periksa untuk memastikan bahawa pembukaan tidak gagal untuk sebab-sebab tertentu. 17 00:01:16,270 --> 00:01:19,860 Kami juga perlu membuka outfile kami, dan lagi kesilapan periksa untuk memastikan bahawa 18 00:01:19,860 --> 00:01:21,250 tidak gagal untuk sebab-sebab tertentu. 19 00:01:21,250 --> 00:01:26,270 Tetapi pastikan jika pembukaan outfile gagal bahawa kita perlu menutup 20 00:01:26,270 --> 00:01:29,040 infile, yang sudah dibuka. 21 00:01:29,040 --> 00:01:33,690 >> Jadi, dengan anggapan bahawa tidak gagal, maka Sign In Register New - seperti dalam copy.c-- 22 00:01:33,690 --> 00:01:36,140 akan membaca dalam pengepala dari infile itu. 23 00:01:36,140 --> 00:01:40,130 Kita akan pastikan ia yang sah bitmap, tetapi sekarang kita akan melakukan 24 00:01:40,130 --> 00:01:41,620 perkara sedikit berbeza. 25 00:01:41,620 --> 00:01:44,870 Jadi pertama, kita akan mahu ingat lebar asal dan ketinggian 26 00:01:44,870 --> 00:01:48,290 daripada infile, kerana kita akan berubah untuk outfile itu. 27 00:01:48,290 --> 00:01:53,890 Jadi sekarang ingat bahawa atas sebab-sebab yang pelik bi.biheight, negatif, dan 28 00:01:53,890 --> 00:01:58,670 jadi ketinggian sebenar, dalam positif, kita mahu mengambil nilai mutlak. 29 00:01:58,670 --> 00:02:02,580 >> Sekarang, padding akan menjadi yang sama pengiraan kerana ia adalah pada copy.c, 30 00:02:02,580 --> 00:02:06,060 menggunakan lebar yang lama, dan sekarang kita sebenarnya akan berubah 31 00:02:06,060 --> 00:02:07,320 apa dalam header kami. 32 00:02:07,320 --> 00:02:11,200 Jadi, kita akan membiak lebar kami dengan n, kerana kita sedang mendaki lebar oleh 33 00:02:11,200 --> 00:02:15,100 n, darab ketinggian dengan n, kerana kami scaling dengan n, dan kini kita mempunyai 34 00:02:15,100 --> 00:02:19,250 pengiraan untuk padding baru berdasarkan lebar baru. 35 00:02:19,250 --> 00:02:21,840 >> Jadi sekarang kita perlu mengubah beberapa bidang-bidang lain dalam header kami. 36 00:02:21,840 --> 00:02:26,890 Bi.biSizeImage sepatutnya menjadi Saiz kesemua bait dalam piksel 37 00:02:26,890 --> 00:02:28,520 dan padding imej. 38 00:02:28,520 --> 00:02:34,190 Dan jadi saiz satu barisan tunggal kami imej adalah saiz RGB tiga saiz 39 00:02:34,190 --> 00:02:39,430 daripada piksel tunggal, masa bilangan 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 membiak bahawa dengan Nilai mutlak ketinggian kami untuk mendapatkan 42 00:02:45,200 --> 00:02:48,350 jumlah bilangan bait dalam data imej. 43 00:02:48,350 --> 00:02:53,050 bf.bfSize hanya jumlah daripada bait dalam data imej kita, jadi 44 00:02:53,050 --> 00:02:56,530 bi.biSizeImage, ditambah dengan saiz header kami. 45 00:02:56,530 --> 00:02:59,850 Jadi, menambah kepada saiz fail bitmap header, dan saiz info bitmap 46 00:02:59,850 --> 00:03:00,800 header, OK. 47 00:03:00,800 --> 00:03:03,170 Jadi, itu semua kita perlu berubah dalam header kami. 48 00:03:03,170 --> 00:03:07,020 Sekarang kita akan menulis tajuk fail bitmap untuk outfile kami, dan maklumat bitmap kami 49 00:03:07,020 --> 00:03:09,880 header untuk outfile kami, dan kini kami bersedia untuk memulakan akan 50 00:03:09,880 --> 00:03:11,990 lebih piksel sebenar. 51 00:03:11,990 --> 00:03:15,720 >> Jadi, kami ingin melelar lebih garis imbasan infile ini. 52 00:03:15,720 --> 00:03:17,730 Jadi, kami ingin melelar lebih oldheight. 53 00:03:17,730 --> 00:03:20,830 Inilah sebabnya mengapa kita perlu ingat ketinggian asal, sebelum kita mengubahnya 54 00:03:20,830 --> 00:03:23,040 dan diskalakan oleh 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 penampan saiz oldwidth. 57 00:03:30,630 --> 00:03:36,190 Saiz Jadi di sini, kita freading RGB tiga kali ganda, satu piksel, dan lebar lama 58 00:03:36,190 --> 00:03:39,760 mereka daripada infile ke dalam buffer kami. 59 00:03:39,760 --> 00:03:43,480 Dan itu akan menjadi satu keseluruhan baris dalam array ini. 60 00:03:43,480 --> 00:03:50,390 Jadi sekarang, kami mahu melelar n kali untuk mencetak baris ini untuk outfile n zaman kita. 61 00:03:50,390 --> 00:03:52,510 Dan jadi itulah yang gelung ini lakukan. 62 00:03:52,510 --> 00:03:57,910 Ini gelung dalaman adalah iterating atas baris sendiri, lebih array, percetakan 63 00:03:57,910 --> 00:04:00,710 setiap piksel dalam pelbagai n kali. 64 00:04:00,710 --> 00:04:04,510 Jadi elemen sifar 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 jenis bagaimana kita akan mendatar skala di outfile, dan 67 00:04:10,820 --> 00:04:13,390 gelung ini, kerana kita sedang menggelung n kali, adalah bagaimana kita akan 68 00:04:13,390 --> 00:04:15,580 skala menegak. 69 00:04:15,580 --> 00:04:19,850 >> Turun di sini, kita melihat bahawa kita perlu menambah padding pada akhir setiap baris. 70 00:04:19,850 --> 00:04:25,050 Itulah sebabnya ini adalah dalam untuk gelung itu mencetak n baris hanya 71 00:04:25,050 --> 00:04:28,400 ini satu baris dari infile itu. 72 00:04:28,400 --> 00:04:32,150 Kemudian turun di sini, saya akan melangkau lebih padding dalam infile, kerana sekali 73 00:04:32,150 --> 00:04:34,560 kita selesai dengan satu baris daripada infile, kita tidak mengambil berat tentang 74 00:04:34,560 --> 00:04:35,290 apa padding itu. 75 00:04:35,290 --> 00:04:37,110 Kami hanya mahu ke baris kedua. 76 00:04:37,110 --> 00:04:40,870 Dan kemudian kita akan gelung belakang dan melakukan segala ini sekali lagi untuk barisan kedua. 77 00:04:40,870 --> 00:04:44,406 >> Akhir sekali, sebaik sahaja kami selesai dengan semua itu, kita boleh menutup infile, berhampiran 78 00:04:44,406 --> 00:04:47,430 outfile, dan pulangan 0 kerana kami sudah selesai. 79 00:04:47,430 --> 00:04:50,330 >> Nama saya Rob, dan ini adalah saiz semula. 80 00:04:50,330 --> 00:04:54,934 >> [MUZIK Bermain]