[MUZIK Bermain] ROB Bowden: Hi, saya Rob, mari kita cuba ini selama saiz. Jadi, kita sekali lagi akan bermula dengan pada dasarnya salinan copy.c, dan membuat beberapa perubahan. Nota segera kita lihat perubahan, di mana bukannya memeriksa untuk melihat jika argc tidak sama 3, kita mahu menyemak jika argc tidak sama 4, kerana sekarang kita tidak hanya mengambil satu infile dan outfile, tetapi kami juga mengambil n, yang adalah jumlah yang kita menampal imej asal oleh. Apabila kita pasti itu, kita boleh hanya menukar n kepada integer menggunakan atoi. Jadi, sekarang kita akan membuat beberapa alias, hanya memanggil argv 2 infile, dan argv 3 outfile, kerana argv 2 dan argv 3 bukan nama sangat membantu. Sekarang kita mahu memeriksa untuk memastikan n dalam batas-batas yang kita jangkakan, jadi spec menyatakan bahawa jika ia kurang daripada atau sama dengan sifar atau lebih besar daripada 100, maka itu faktor saiz semula tidak sah, dan kita harus memberi amaran kepada pengguna itu. Begitu kita di luar semua itu, kita boleh akhirnya membuka infile kita, dan kita perlu untuk kesilapan periksa untuk memastikan bahawa pembukaan tidak gagal untuk sebab-sebab tertentu. Kami juga perlu membuka outfile kami, dan lagi kesilapan periksa untuk memastikan bahawa tidak gagal untuk sebab-sebab tertentu. Tetapi pastikan jika pembukaan outfile gagal bahawa kita perlu menutup infile, yang sudah dibuka. Jadi, dengan anggapan bahawa tidak gagal, maka Sign In Register New - seperti dalam copy.c-- akan membaca dalam pengepala dari infile itu. Kita akan pastikan ia yang sah bitmap, tetapi sekarang kita akan melakukan perkara sedikit berbeza. Jadi pertama, kita akan mahu ingat lebar asal dan ketinggian daripada infile, kerana kita akan berubah untuk outfile itu. Jadi sekarang ingat bahawa atas sebab-sebab yang pelik bi.biheight, negatif, dan jadi ketinggian sebenar, dalam positif, kita mahu mengambil nilai mutlak. Sekarang, padding akan menjadi yang sama pengiraan kerana ia adalah pada copy.c, menggunakan lebar yang lama, dan sekarang kita sebenarnya akan berubah apa dalam header kami. Jadi, kita akan membiak lebar kami dengan n, kerana kita sedang mendaki lebar oleh n, darab ketinggian dengan n, kerana kami scaling dengan n, dan kini kita mempunyai pengiraan untuk padding baru berdasarkan lebar baru. Jadi sekarang kita perlu mengubah beberapa bidang-bidang lain dalam header kami. Bi.biSizeImage sepatutnya menjadi Saiz kesemua bait dalam piksel dan padding imej. Dan jadi saiz satu barisan tunggal kami imej adalah saiz RGB tiga saiz daripada piksel tunggal, masa bilangan piksel berturut-turut, ditambah padding di akhir baris. Dan kemudian kita akan membiak bahawa dengan Nilai mutlak ketinggian kami untuk mendapatkan jumlah bilangan bait dalam data imej. bf.bfSize hanya jumlah daripada bait dalam data imej kita, jadi bi.biSizeImage, ditambah dengan saiz header kami. Jadi, menambah kepada saiz fail bitmap header, dan saiz info bitmap header, OK. Jadi, itu semua kita perlu berubah dalam header kami. Sekarang kita akan menulis tajuk fail bitmap untuk outfile kami, dan maklumat bitmap kami header untuk outfile kami, dan kini kami bersedia untuk memulakan akan lebih piksel sebenar. Jadi, kami ingin melelar lebih garis imbasan infile ini. Jadi, kami ingin melelar lebih oldheight. Inilah sebabnya mengapa kita perlu ingat ketinggian asal, sebelum kita mengubahnya dan diskalakan oleh n. Sekarang kita akan membaca satu deretan infile ke dalam penampan saiz oldwidth. Saiz Jadi di sini, kita freading RGB tiga kali ganda, satu piksel, dan lebar lama mereka daripada infile ke dalam buffer kami. Dan itu akan menjadi satu keseluruhan baris dalam array ini. Jadi sekarang, kami mahu melelar n kali untuk mencetak baris ini untuk outfile n zaman kita. Dan jadi itulah yang gelung ini lakukan. Ini gelung dalaman adalah iterating atas baris sendiri, lebih array, percetakan setiap piksel dalam pelbagai n kali. Jadi elemen sifar sedang dicetak n kali, elemen pertama sedang dicetak n kali. Dan itu jenis bagaimana kita akan mendatar skala di outfile, dan gelung ini, kerana kita sedang menggelung n kali, adalah bagaimana kita akan skala menegak. Turun di sini, kita melihat bahawa kita perlu menambah padding pada akhir setiap baris. Itulah sebabnya ini adalah dalam untuk gelung itu mencetak n baris hanya ini satu baris dari infile itu. Kemudian turun di sini, saya akan melangkau lebih padding dalam infile, kerana sekali kita selesai dengan satu baris daripada infile, kita tidak mengambil berat tentang apa padding itu. Kami hanya mahu ke baris kedua. Dan kemudian kita akan gelung belakang dan melakukan segala ini sekali lagi untuk barisan kedua. Akhir sekali, sebaik sahaja kami selesai dengan semua itu, kita boleh menutup infile, berhampiran outfile, dan pulangan 0 kerana kami sudah selesai. Nama saya Rob, dan ini adalah saiz semula. [MUZIK Bermain]