>> [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]